c++ builder 编写web services容易遇到的小问题

由于项目需要,要编写webservices应用,网上这方面的资料不是太多。现把我写程序时候遇到的问题粗略记录如下:

 

 

第一步,在已有项目中引入webservices:

  

    在C++ builder 菜单中选择 File-》New-》Other-》打开New Items

选中WebServices页中的 WSDL Importer,打开WSDL Import Wizard,在下面的URL中输入服务的地址(如:

http://127.0.0.1/Service.asmx?wsdl)。注意后面加上的"?wsdl”。这样就生成了Service.cpp  和 Service.h

两个文件。

 

第二步,在项目中使用服务:

 

   首先包含头文件,#include "Service.h"。 声明变量, _di_ServiceSoap WebService ;使用相应的服务。这时会

遇到问题,就是给服务传参数,服务接收不到。经过查找资料,最终在台湾的一个网站中找到解决办法。

 

第三步,编辑生成的Service.cpp:

 

  生成的文件中最后有一段如下代码:

static void RegTypes()
{
  /* ServiceSoap */
  InvRegistry()->RegisterInterface(__interfaceTypeinfo(ServiceSoap), L"http://tempuri.org/", L"utf-8");
  InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(ServiceSoap), L"http://tempuri.org/%operationName%");
}

在后面添加一行,改成这样:

static void RegTypes()
{
  /* ServiceSoap */
  InvRegistry()->RegisterInterface(__interfaceTypeinfo(ServiceSoap), L"http://tempuri.org/", L"utf-8");
  InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(ServiceSoap), L"http://tempuri.org/%operationName%");
  InvRegistry()->RegisterInvokeOptions(__interfaceTypeinfo(ServiceSoap), ioDocument);
}

 

至此,服务和应用已经可以正常的接收和返回“英文,数字”。但是,如果是中文就会出现乱码,不能正常处理。接着查阅资料,都

说是字符编码问题,改变默认的字符编码可以解决,经过试验,都没有解决。经过测试,找到一个解决办法,但不一定是最好的方法。

就是把所有的中文参数或是返回值,重新编码,应用或服务接收到后,再解码。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值