1.在IIS下的soap服务已经安装完毕,
通过访问http://localhost:801/SMSService.exe/wsdl页面也可以正常显示。
2.ShortMessege\server下的ScktSrvr.exe和SMS.exe 都可以起来。
3.现在我在delphi下该怎么去调用soap服务??
在网上找到的一些资料http://www.web521.com/web/586568/T667436.shtml是delphi和DB2环境下的,但是有很多地方都看不太懂,按照它上面的步骤操作出来的结果也不一样。
请问我该怎么去做?
9 个解决方案
#1
file->new->webservices->swdl importer
#2
可以再说的详细一点么?
#3
么有遇到过~ 顶起
#4
我现在添加wsdl importer进入到工程里,
它生成一个ISMSService.cpp的一个文件
内容是这样的:
但是我现在该怎么去调用它?请高手指教.在线等。
它生成一个ISMSService.cpp的一个文件
内容是这样的:
#include <vcl.h>
#pragma hdrstop
#if !defined(ISMSServiceH)
#include "ISMSService.h"
#endif
namespace NS_ISMSService {
_di_ISMSService GetISMSService(bool useWSDL, AnsiString addr)
{
static const char* defWSDL= "http://192.168.10.108:801/SMSService.exe/wsdl/ISMSService";
static const char* defURL = "http://192.168.10.108:801/SMSService.exe/soap/ISMSService";
static const char* defSvc = "ISMSServiceservice";
static const char* defPrt = "ISMSServicePort";
if (addr=="")
addr = useWSDL ? defWSDL : defURL;
THTTPRIO* rio = new THTTPRIO(0);
if (useWSDL) {
rio->WSDLLocation = addr;
rio->Service = defSvc;
rio->Port = defPrt;
} else {
rio->URL = addr;
}
_di_ISMSService service;
rio->QueryInterface(service);
if (!service)
delete rio;
return service;
}
// ************************************************************************ //
// This routine registers the interfaces and types used by invoke the SOAP
// Service.
// ************************************************************************ //
static void RegTypes()
{
/* ISMSService */
InvRegistry()->RegisterInterface(__interfaceTypeinfo(ISMSService), L"urn:SMSServiceIntf-ISMSService", L"utf-8");
InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(ISMSService), L"urn:SMSServiceIntf-ISMSService#%operationName%");
}
#pragma startup RegTypes 32
}; // NS_ISMSService
但是我现在该怎么去调用它?请高手指教.在线等。
#5
我的代码,你参照以下,还是建议你到网上找找说明
_di_IwsGetMSN service;
String result="";
String email,password;
email = Edit1->Text;
password = Edit2->Text;
service=GetIwsGetMSN(true,"http://192.168.1.92:8000/getMSNLst/getMSNLst.dll/wsdl/IwsGetMSN");
result = service->GetMSN(email,password);
Memo1->Lines->Add(result);
#6
_di_ISMSService pSMS = GetISMSService(true,NULL);
if(pSMS)
{
pSMS->...;//你的SOAP提供的功能,参考h文件里ISMSService的定义
}
if(pSMS)
{
pSMS->...;//你的SOAP提供的功能,参考h文件里ISMSService的定义
}
#7
感谢楼上的回复!还有点疑问。
这是ISMSService.h中的ISMSService的定义
我是这样调用的:
但是接下来我该怎么将发送的数据写入数据以库。
这是ISMSService.h中的ISMSService的定义
__interface INTERFACE_UUID("{2133FC9C-6894-95FA-ABF6-D69EB4A08A4B}") ISMSService : public IInvokable
{
public:
virtual AnsiString GetMessage() = 0;
virtual int SetMsg(const AnsiString Msg, const AnsiString Tel, const AnsiString SendTime) = 0;
virtual int DelMsg(const AnsiString MsgID) = 0;
virtual int ModfiyMsg(const AnsiString MsgID, const AnsiString Msg, const AnsiString Tel, const AnsiString SendTime) = 0;
virtual void GetMsg(AnsiString& xmldata) = 0;
};
typedef DelphiInterface<ISMSService> _di_ISMSService;
_di_ISMSService GetISMSService(bool useWSDL=false, AnsiString addr="");
我是这样调用的:
_di_ISMSService smsService;//我这样写对么?但是这个方法的返回值是void
String result = "";
OleCheck(HTTPRIO1->QueryInterface(smsService));
//smsService = GetISMSService(true,"http://192.168.10.108:801/SMSService.exe/wsdl/ISMSService");
if(smsService)
{
result = smsService->SetMsg(smsContent,mobile,sendTime);//这3个参数都已经在上面定义
}
//在这里可以看到result的值为1。
smsService->GetMsg(result);
但是接下来我该怎么将发送的数据写入数据以库。
#8
这个是SOAP服务提供的范围了,你看看ISMSService的技术说明书或找他们客服吧:)
#9
~~呵呵 问题已经解决了!谢谢大家了。
#1
file->new->webservices->swdl importer
#2
可以再说的详细一点么?
#3
么有遇到过~ 顶起
#4
我现在添加wsdl importer进入到工程里,
它生成一个ISMSService.cpp的一个文件
内容是这样的:
但是我现在该怎么去调用它?请高手指教.在线等。
它生成一个ISMSService.cpp的一个文件
内容是这样的:
#include <vcl.h>
#pragma hdrstop
#if !defined(ISMSServiceH)
#include "ISMSService.h"
#endif
namespace NS_ISMSService {
_di_ISMSService GetISMSService(bool useWSDL, AnsiString addr)
{
static const char* defWSDL= "http://192.168.10.108:801/SMSService.exe/wsdl/ISMSService";
static const char* defURL = "http://192.168.10.108:801/SMSService.exe/soap/ISMSService";
static const char* defSvc = "ISMSServiceservice";
static const char* defPrt = "ISMSServicePort";
if (addr=="")
addr = useWSDL ? defWSDL : defURL;
THTTPRIO* rio = new THTTPRIO(0);
if (useWSDL) {
rio->WSDLLocation = addr;
rio->Service = defSvc;
rio->Port = defPrt;
} else {
rio->URL = addr;
}
_di_ISMSService service;
rio->QueryInterface(service);
if (!service)
delete rio;
return service;
}
// ************************************************************************ //
// This routine registers the interfaces and types used by invoke the SOAP
// Service.
// ************************************************************************ //
static void RegTypes()
{
/* ISMSService */
InvRegistry()->RegisterInterface(__interfaceTypeinfo(ISMSService), L"urn:SMSServiceIntf-ISMSService", L"utf-8");
InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(ISMSService), L"urn:SMSServiceIntf-ISMSService#%operationName%");
}
#pragma startup RegTypes 32
}; // NS_ISMSService
但是我现在该怎么去调用它?请高手指教.在线等。
#5
我的代码,你参照以下,还是建议你到网上找找说明
_di_IwsGetMSN service;
String result="";
String email,password;
email = Edit1->Text;
password = Edit2->Text;
service=GetIwsGetMSN(true,"http://192.168.1.92:8000/getMSNLst/getMSNLst.dll/wsdl/IwsGetMSN");
result = service->GetMSN(email,password);
Memo1->Lines->Add(result);
#6
_di_ISMSService pSMS = GetISMSService(true,NULL);
if(pSMS)
{
pSMS->...;//你的SOAP提供的功能,参考h文件里ISMSService的定义
}
if(pSMS)
{
pSMS->...;//你的SOAP提供的功能,参考h文件里ISMSService的定义
}
#7
感谢楼上的回复!还有点疑问。
这是ISMSService.h中的ISMSService的定义
我是这样调用的:
但是接下来我该怎么将发送的数据写入数据以库。
这是ISMSService.h中的ISMSService的定义
__interface INTERFACE_UUID("{2133FC9C-6894-95FA-ABF6-D69EB4A08A4B}") ISMSService : public IInvokable
{
public:
virtual AnsiString GetMessage() = 0;
virtual int SetMsg(const AnsiString Msg, const AnsiString Tel, const AnsiString SendTime) = 0;
virtual int DelMsg(const AnsiString MsgID) = 0;
virtual int ModfiyMsg(const AnsiString MsgID, const AnsiString Msg, const AnsiString Tel, const AnsiString SendTime) = 0;
virtual void GetMsg(AnsiString& xmldata) = 0;
};
typedef DelphiInterface<ISMSService> _di_ISMSService;
_di_ISMSService GetISMSService(bool useWSDL=false, AnsiString addr="");
我是这样调用的:
_di_ISMSService smsService;//我这样写对么?但是这个方法的返回值是void
String result = "";
OleCheck(HTTPRIO1->QueryInterface(smsService));
//smsService = GetISMSService(true,"http://192.168.10.108:801/SMSService.exe/wsdl/ISMSService");
if(smsService)
{
result = smsService->SetMsg(smsContent,mobile,sendTime);//这3个参数都已经在上面定义
}
//在这里可以看到result的值为1。
smsService->GetMsg(result);
但是接下来我该怎么将发送的数据写入数据以库。
#8
这个是SOAP服务提供的范围了,你看看ISMSService的技术说明书或找他们客服吧:)
#9
~~呵呵 问题已经解决了!谢谢大家了。