c++builder向c#开发的webservice传递非数字参数
2013-08-17 09:50
357 查看
一、引用WebService地址
BCB6.0环境下,File-New-Other-WebService-WSDL Importer。然后手动写完整地址。如:“http://192.168.1.3:1234/UpdateService.asmx?WSDL”。一路“下一步”之后,可以发现自动增加了UpdateService.cpp和UpdateService.h两个文件,保存。
UpdateService.h中webservice接口及参数设置如下:
二、在程序主窗体中添加THTTPRIO控件
这个控件的作用是
THTTPRIO uses HTTP messages to call remote interfaced objects using SOAP.
Use THTTPRIO to generate statically-linked calls to invokable interfaces on a remote Web Service application.
里面有几个属性设置下
从下面一个属性开始
1,WSDLLocation,下拉菜单选中 http://192.168.1.3:1234/UpdateService.asmx?WSDL
2,Service,下拉菜单选中 UpdateService
3,Port,下拉菜单选中,这里有2个选项,一个是WebServiceSoap和WebServiceSoap12,我们选中第一个。(因为BCB6.0还不能很好支持WebServiceSoap12)
三、添加引用
1,添加头文件
在窗体Form1.h文件里
添加UpdateService1.h的头文件。
2,声明
3,在主程序的cpp中添加引用
调用webservice方法:
运行程序后返回的值始终不对,但用c#做的客户端就返回正确,确定是bcb这的问题,经上网搜索,是字符集的问题。包括我们可能会发现只能传数字,不能传中英文的参数,原因很简单,字符集不一致,导致服务器收到了乱码参数,而不是收不到参数。 那么我们需要做3部分工作来完成对字符集的调整。
1,UpdateService1.cpp里,
THTTPRIO* rio = new THTTPRIO(0);的后面,加上以下两句话:
// rio->HTTPWebNode->UseUTF8InHeader = true; rio->Converter->Options<<soUTF8InHeader; //
2,还是在UpdateService1.cpp里,
static void RegTypes(){这个函数的最后,我们需要加上下面一段话}
3,调整THTTPRIO控件的字符集调整
这个控件的属性有两处关于utf8的bool值,请都改成true就可以了。(那2处都很好找,属性名就有utf8字眼)
如上修改后参数能被正确传递,并能正确返回结果值。
BCB6.0环境下,File-New-Other-WebService-WSDL Importer。然后手动写完整地址。如:“http://192.168.1.3:1234/UpdateService.asmx?WSDL”。一路“下一步”之后,可以发现自动增加了UpdateService.cpp和UpdateService.h两个文件,保存。
UpdateService.h中webservice接口及参数设置如下:
__interface INTERFACE_UUID("{650CB923-0260-F472-915C-507FBAE06BF6}") UpdateServiceSoap : public IInvokable { public: virtual AnsiString GetURLAddres() = 0; virtual AnsiString GetTheLastUpdateTime(const AnsiString sDownLoadFiles) = 0; virtual AnsiString GetUpdateFiles(const AnsiString sDownLoadFiles) = 0; };
二、在程序主窗体中添加THTTPRIO控件
这个控件的作用是
THTTPRIO uses HTTP messages to call remote interfaced objects using SOAP.
Use THTTPRIO to generate statically-linked calls to invokable interfaces on a remote Web Service application.
里面有几个属性设置下
从下面一个属性开始
1,WSDLLocation,下拉菜单选中 http://192.168.1.3:1234/UpdateService.asmx?WSDL
2,Service,下拉菜单选中 UpdateService
3,Port,下拉菜单选中,这里有2个选项,一个是WebServiceSoap和WebServiceSoap12,我们选中第一个。(因为BCB6.0还不能很好支持WebServiceSoap12)
三、添加引用
1,添加头文件
在窗体Form1.h文件里
添加UpdateService1.h的头文件。
2,声明
public: // User declarations String sUrl,sPreFileNames; AnsiString sTmpDwnFilesDir; __fastcall TForm1(TComponent* Owner); _di_UpdateServiceSoap FUpdateService; _di_UpdateServiceSoap GetUpdateServiceSoap(); __property _di_UpdateServiceSoap UpdateService1={ read =GetUpdateServiceSoap};
3,在主程序的cpp中添加引用
_di_UpdateServiceSoap TForm1::GetUpdateServiceSoap() { if(!FUpdateService) { HTTPRIO1->QueryInterface(FUpdateService); } return FUpdateService; }
调用webservice方法:
sUpdateTime = UpdateService1->GetTheLastUpdateTime(sTmpDwnFilesDir) ; sPreFileNames = UpdateService1->GetUpdateFiles(sTmpDwnFilesDir);
运行程序后返回的值始终不对,但用c#做的客户端就返回正确,确定是bcb这的问题,经上网搜索,是字符集的问题。包括我们可能会发现只能传数字,不能传中英文的参数,原因很简单,字符集不一致,导致服务器收到了乱码参数,而不是收不到参数。 那么我们需要做3部分工作来完成对字符集的调整。
1,UpdateService1.cpp里,
THTTPRIO* rio = new THTTPRIO(0);的后面,加上以下两句话:
// rio->HTTPWebNode->UseUTF8InHeader = true; rio->Converter->Options<<soUTF8InHeader; //
2,还是在UpdateService1.cpp里,
static void RegTypes(){这个函数的最后,我们需要加上下面一段话}
InvRegistry()->RegisterInvokeOptions(__interfaceTypeinfo(UpdateServiceSoap), ioDocument);
3,调整THTTPRIO控件的字符集调整
这个控件的属性有两处关于utf8的bool值,请都改成true就可以了。(那2处都很好找,属性名就有utf8字眼)
如上修改后参数能被正确传递,并能正确返回结果值。
相关文章推荐
- c++builder向c#开发的webservice传递非数字参数
- 【工作记录0022】C#(.NET)调用Java开发的WebService(wsdl),客户端传递非string类型参数(int,double,bool等),而服务端无法获取到参数值的解决方案
- 用C#.NET调用Java开发的WebService传递int、double,结果总为0
- 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!
- Delphi (c++builder) 调用C#编写的WebService 参数为Null解决方法
- 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!
- PHP SOAP client pass array to C# SOAP webservice(PHP SOAP 数组参数传递)
- 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获 3ff0
- C#与ASP.NET(CS与BS)结合开发应用传递参数的方法
- 【转】用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!
- 用C#.NET调用Java开发的WebService传递int,double问题
- C#开发的WebService使用JSON格式传递数据+Ajax测试
- C# ASP.net 解决easyui treegrid传递参数后台无法获取的问题
- 在c#中执行sql语句时传递参数
- C# 给多线程传递参数的三种方式
- Delphi调用java开发的WebService,传入参数出错
- C#调用WebService实例和开发
- C# 使用Tuple传递多个参数
- C#调用WebService实例和开发(转)
- C#打开Adobe Reader进程打开pdf并传递页码参数跳转到指定页数