一、引用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. 有关linux下redis overcommit_memory的问题(转)

    一.背景 公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的: [13223] 17 Mar 13:18:02.207 # WARNING ov ...

  2. 【转】Android实例剖析笔记(二)--用实例讲解Andriod的开发过程,以NotesList为实例介绍Android的菜单机制

    原文网址:http://kb.cnblogs.com/page/78304/ 简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. op ...

  3. (转载)PHP源代码分析- tick(s)

    (转载)http://bbs.phpchina.com/forum.php?mod=viewthread&tid=94534 昨天有位朋友在杭州的PHPer群里面贴出了下面的一段代码并给出了运 ...

  4. poj 3608 旋转卡壳求不相交凸包最近距离;

    题目链接:http://poj.org/problem?id=3608 #include<cstdio> #include<cstring> #include<cmath ...

  5. Java父类子类的对象初始化过程

    摘要 Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: static 修饰的模块(static变量和 ...

  6. HDU--2040

    亲和数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  7. 自己动手写shell之chgrp,chown,chmod

    1.chgrp实现 #include <grp.h> #include <unistd.h> void chgrp(char * groupname,char * filena ...

  8. win32下进程间通信——共享内存

    一.引言     在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换 ...

  9. vs2008试用期到期解决办法

    vs2008试用期结束之后,     在“控制面板”中启动“添加删除程序”,      选中Vs2008,点击“更改.删除”,      在出现的维护模式对话框中, 选择下一步,输入下面的CD-Key ...

  10. 3 Ways to Preload Images with CSS, JavaScript, or Ajax---reference

    Preloading images is a great way to improve the user experience. When images are preloaded in the br ...