552
社区成员
发帖
与我相关
我的任务
分享
WebService类的头文件的代码
#ifndef Service1H
#define Service1H
#include <System.hpp>
#include <InvokeRegistry.hpp>
#include <XSBuiltIns.hpp>
#include <SoapHTTPClient.hpp>
namespace NS_Service1 {
__interface INTERFACE_UUID("{CFE467D4-A39E-2BD2-5836-7685A9E27F8D}") Service1Soap : public IInvokable
{
public:
virtual AnsiString HelloWorld() = 0;
virtual AnsiString SetRoomPerInfo(const AnsiString StationName,const AnsiString name,const AnsiString company,const AnsiString dept,const AnsiString mobile,const AnsiString intertime,const int eventtype) = 0;
};
typedef DelphiInterface<Service1Soap> _di_Service1Soap;
_di_Service1Soap GetService1Soap(bool useWSDL=false, AnsiString addr="", AnsiString URL="");
};
WebService类的cpp文件代码:
#include <vcl.h>
#pragma hdrstop
#if !defined(Service1H)
#include "Service1.h"
#endif
namespace NS_Service1 {
_di_Service1Soap GetService1Soap(bool useWSDL, AnsiString addr, AnsiString URL) //by weiyl 2011-08-18 useWSDL=true,调用本机webservice, =false 调用非本机的地址
{ //URL 通过配置文件传递进来
static const char* defWSDL= "F://winter project//BCB WebService Client//Service1.wsdl";
static const char* defURL = "http://192.168.36.22/WYL/TEST/Service1.asmx"; //对方提供的地址
static const char* defSvc = "Service1";
static const char* defPrt = "Service1Soap";
if (addr=="")
//addr = useWSDL ? defWSDL : defURL; //访问非本机时,注释掉此句
addr = URL; //访问非本机,用此句 以上定义的地址都没有用到
THTTPRIO* rio = new THTTPRIO(0);
rio->HTTPWebNode->UseUTF8InHeader = true;
rio->Converter->Options<<soUTF8InHeader;
if (useWSDL) {
rio->WSDLLocation = addr;
rio->Service = defSvc;
rio->Port = defPrt;
} else {
rio->URL = addr;
}
_di_Service1Soap service;
rio->QueryInterface(service);
if (!service)
delete rio;
return service;
}
static void RegTypes()
{
/* Service1Soap */
InvRegistry()->RegisterInterface(__interfaceTypeinfo(Service1Soap), L"http://dzxj.szmcc.net/", L"utf-8");
InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(Service1Soap), L"http://dzxj.szmcc.net/%operationName%");
InvRegistry()->RegisterInvokeOptions(__interfaceTypeinfo(Service1Soap), ioDocument);
}
#pragma startup RegTypes 32
};
主函数里面的调用代码:
NS_Service1::_di_Service1Soap p = NS_Service1::GetService1Soap(false, "", ss); //进入WebService类
AnsiString temptime = AnsiString("2011-08-18 20:00:00"); //进入时间
AnsiString stationname = "棠下一村"; //基站名称
AnsiString name = "水岭" ;
AnsiString company = "XXX" ;
AnsiString dept = "软件工程师" ;
AnsiString mobile = "13570420000" ;
p->SetRoomPerInfo(stationname,name,company,dept,mobile,temptime,1);
_di_ServiceSoap GetServiceSoap(bool useWSDL=false, AnsiString addr="");