基于starcore编写webservice,非常简单,不需要了解WSDL的细节,starcore仅为一共享库,很容易嵌入到其它应用中。
可以采用starcore支持的脚本语言,目前为python,lua和c++;语法风格一致。
lua的例子,仅需9行有效代码
require "libstarcore"
Service=libstarcore._InitSimple("WebServiceCallServer","123",0,3040)
AtomicClass = Service:_CreateAtomicObjectSimple("TestItem","TestClass","","");
--定义函数原型
Service:_CreateAtomicFunctionSimple(AtomicClass,"GetNumber","VS_INT32 GetNumber(VS_INT32 Para);","");
--创建对象
a = Service.TestClass:_New("TestObject")
--设置为WebService对象
a._WebServiceFlag=true
function Service.TestClass:GetNumber(a)
return a+1
end
python的例子,仅需9行有效代码
import starpy
Service=starpy._InitSimple("WebServiceCallServer","123",0,3040)
AtomicClass,ErrorInfo = Service._CreateAtomicObjectSimple("TestItem","TestClass","","");
#--定义函数原型
Service._CreateAtomicFunctionSimple(AtomicClass,"GetNumber","VS_INT32 GetNumber(VS_INT32 Para);","");
#--创建对象
a = Service.TestClass._New("TestObject")
#--设置为WebService对象
a._WebServiceFlag=True
def Service_TestClass_GetNumber(self,a) :
return a+1
Service.TestClass.GetNumber = Service_TestClass_GetNumber
C++的例子,也非常简单
#include "vsopenapi.h"
static VS_INT32 GetNumber(void *Object,VS_INT32 Para)
{
printf( "Remote Call Number [%d]/n ",Para);
return Para + 1;
}
//----------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
VS_CORESIMPLECONTEXT Context;
class ClassOfSRPInterface *SRPInterface;
void *AtomicClass,*GetNumber_AtomicFunction,*Object;
VS_UUID ClassID;
VS_CHAR *ErrorInfo;
SRPInterface = VSCore_InitSimple(&Context,"WebServiceCallServer","123",0,3040,NULL,NULL,NULL);
AtomicClass = SRPInterface ->CreateAtomicObjectSimple("TestItem","TestClass",NULL,NULL,&ErrorInfo);
GetNumber_AtomicFunction = SRPInterface ->CreateAtomicFunctionSimple(AtomicClass,"GetNumber","VS_INT32 GetNumber(VS_INT32 Para);",NULL,NULL);
SRPInterface -> SetAtomicFunction(GetNumber_AtomicFunction,(void *)GetNumber);
SRPInterface ->GetAtomicID(AtomicClass,&ClassID);
Object = SRPInterface ->MallocObjectL(&ClassID,0,NULL);
SRPInterface ->SetName(Object,"TestObject");
SRPInterface ->SetWebServiceFlag(Object,VS_TRUE);
VSCore_RunSimple(&Context,NULL);
VSCore_TermSimple(&Context);
return 0;
}
通过IE访问,http://127.0.0.1:3040/wsdl,和获取上述web服务的wsdl描述文件