c++builder向c#开发的webservice传递非数字参数
一、引用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接口及参数设置如下:
__interface INTERFACE_UUID("{650CB923-0260-F472-915C-507FBAE06BF6}") UpdateServiceSoap : public IInvokable
{
public:
virtual AnsiString GetURLAddres() = ; virtual AnsiString GetTheLastUpdateTime(const AnsiString sDownLoadFiles) = ;
virtual AnsiString GetUpdateFiles(const AnsiString sDownLoadFiles) = ;
};
二、在程序主窗体中添加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);的后面,加上以下两句话:
2,还是在UpdateService1.cpp里,
static void RegTypes(){这个函数的最后,我们需要加上下面一段话}
InvRegistry()->RegisterInvokeOptions(__interfaceTypeinfo(UpdateServiceSoap), ioDocument);
3,调整THTTPRIO控件的字符集调整
这个控件的属性有两处关于utf8的bool值,请都改成true就可以了。(那2处都很好找,属性名就有utf8字眼)
如上修改后参数能被正确传递,并能正确返回结果值。
c++builder向c#开发的webservice传递非数字参数的更多相关文章
- 用C#.NET调用Java开发的WebService传递int,double问题
用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...
- 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!
https://www.cnblogs.com/zhbsh/archive/2013/04/22/3035477.html 用C#.NET调用Java开发的WebService时,先在客户端封装的带有 ...
- 从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现
相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人 ...
- 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)
一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...
- IIS中访问自己开发的Webservice site就自动停止,尝试重启IIS和重启服务器都不能解决。
今天在加班的时候发现一个奇怪的问题,IIS里面我们自己开发的Webservice site一访问就自动停止.尝试重启IIS和重启服务器都不能解决.后台windows events报错信息是The Mo ...
- 开发RESTful WebService
RESTful风格的webservice越来越流行了,sun也推出了RESTful WebService的官方规范:JAX-RS,全称:Java API for RESTful WebService. ...
- WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据
Webservice传递的数据只能是序列化的数据,典型的就是xml数据. /// <summary> /// 通过用户名和密码 返回下行数据 /// & ...
- Java平台调用.net开发的WebService报错处理
1.报错:服务器未能识别 HTTP 头 SOAPAction 的值 : 解决办法:.net 开发的WebService文件中(.asmx)增加属性: [SoapDocumentService(Rout ...
- webservice接口测试wsdl,参数是xml格式。python,入参转化成str,返回值转化成dict调用
1.用SoapUI测试webservice接口,传入参数是xml格式时.xml格式需要将xml的外围增加<![CDATA[xml]]> 2.但是用python去做webservice测试, ...
随机推荐
- 【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810 题目大意: 一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的 ...
- java工作流bpm开发ERP实例
今天看了一个java工作流bpm开发ERP的例子,文章介绍:http://tech.it168.com/a2009/0507/275/000000275294_14.shtml 增加数据块 一路照做就 ...
- 带你一分钟理解 JavaScript 闭包
什么是闭包? 先看一段代码: function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); ...
- 网络编程之TCP异步群聊:客户端代码
最近朋友建议我写一些关于微软云技术的博客留给学校下一届的学生们看,怕下一届的MSTC断档.于是我也觉的有这个必要.写了几篇博客之后,我觉得也有必要把这一年的学习内容放在博客做个纪念,就这样写了本篇博客 ...
- 个人整理--Java编码规范
编码规范对于开发人员来说是非常重要的,有以下几个原因: 1.一个软件的生命周期中,80%的花费在于维护 2.几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 3.编码规范可以改善软件 ...
- [Angular 2] @ngrx/devtools demo
Check the Github: https://github.com/ngrx/devtools Example:
- 统计Oracle数据库文件的大小
1. 统计数据文件.暂时文件.日志文件大小 select sum(bytes)/1024/1024/1024 as GB from dba_data_files; select sum(bytes)/ ...
- configure JAAS for jboss 7.1 and mysql--reference
Hello all, In this tutorial we are going to configure JAAS for jboss 7.1 and mysql for Form based au ...
- 系统spt_values表--生成时间方便left join
时间处理我给你提供一个思路 系统有个spt_values表,可以构造一整个月的日期,然后左连接你统计好的数据,用CTE表构造多次查询 spt_values的超级经典的应用 http://www. ...
- C#操作word封装
在项目中添加Microsoft.Office.Interop.Word.dll引用 Codepublic class WordAPI{ private object _template; ...