一、引用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);的后面,加上以下两句话:

//      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传递非数字参数的更多相关文章

  1. 用C#.NET调用Java开发的WebService传递int,double问题

    用C#.NET调用Java开发的WebService时,先在客户端封装的带有int属性的对象,当将该对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int类型.double和D ...

  2. 用C#.NET调用Java开发的WebService传递int,double问题,出现java无法获得值!

    https://www.cnblogs.com/zhbsh/archive/2013/04/22/3035477.html 用C#.NET调用Java开发的WebService时,先在客户端封装的带有 ...

  3. 从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现

    相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人 ...

  4. 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

    一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...

  5. IIS中访问自己开发的Webservice site就自动停止,尝试重启IIS和重启服务器都不能解决。

    今天在加班的时候发现一个奇怪的问题,IIS里面我们自己开发的Webservice site一访问就自动停止.尝试重启IIS和重启服务器都不能解决.后台windows events报错信息是The Mo ...

  6. 开发RESTful WebService

    RESTful风格的webservice越来越流行了,sun也推出了RESTful WebService的官方规范:JAX-RS,全称:Java API for RESTful WebService. ...

  7. WebService传递XML数据 C#DataSet操作XML 解析WebService返回的XML数据

    Webservice传递的数据只能是序列化的数据,典型的就是xml数据.   /// <summary>         /// 通过用户名和密码 返回下行数据         /// & ...

  8. Java平台调用.net开发的WebService报错处理

    1.报错:服务器未能识别 HTTP 头 SOAPAction 的值 : 解决办法:.net 开发的WebService文件中(.asmx)增加属性: [SoapDocumentService(Rout ...

  9. webservice接口测试wsdl,参数是xml格式。python,入参转化成str,返回值转化成dict调用

    1.用SoapUI测试webservice接口,传入参数是xml格式时.xml格式需要将xml的外围增加<![CDATA[xml]]> 2.但是用python去做webservice测试, ...

随机推荐

  1. soap协议

    定义: 简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息. 协议中的几个关键词术语: SO ...

  2. (转载)URL与URI的区别

    (转载)http://blog.csdn.net/eagle51998/article/details/372052 1  URL(Uniform Resoure Locator:统一资源定位器)是W ...

  3. 【枚举】Vijos P1496 火柴棒等式 (NOIP2008提高组第二题)

    题目链接: https://vijos.org/p/1496 题目大意: 给你n(n<24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?("+"和"=&qu ...

  4. [转载]值得推荐的C/C++框架和库

    值得学习的C语言开源项目 C++ 资源大全 值得学习的C语言开源项目 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我 ...

  5. Jenkins 学习资料

    学习资料: iTech's Blog: Jenkins 入门总结 爱自己: 18篇博客 阳光温暖了心情: 17 篇博客 官网 参考: 构建基于Jenkins + Github的持续集成环境 CI持续集 ...

  6. hdu 3698 Let the light guide us(线段树优化&简单DP)

    Let the light guide us Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 62768/32768 K (Java/O ...

  7. Python判断上传文件类型

    在开发上传服务时,经常需要对上传的文件进行过滤. 本文为大家提供了python通过文件头判断文件类型的方法,非常实用. 代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  8. STL——静态常量整数成员在class内部直接初始化

    如果class内含const static integral data member,那么根据C++标志规格,我们可以在class之内直接给予初值.所谓integral泛指所有的整数型别(包括浮点数) ...

  9. 《Android开发艺术探索》读书笔记 (10) 第10章 Android的消息机制

    第10章 Android的消息机制 10.1 Android消息机制概述 (1)Android的消息机制主要是指Handler的运行机制,其底层需要MessageQueue和Looper的支撑.Mes ...

  10. Android上传文件到服务器(转)

    Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简 ...