logo资料库

c++ 调用java写的webservice接口.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
目 录
一、简介
二、使用说明
2.1 安装使用Soap Toolk
2.2 使用mssoap tookit 3.0监视C++调用web service
2.3不使用mssoap tookit 3.0监视C++调用web service
2.4 被调用的方法参数是数组的情形
下面是调用numList的情形,通过查看wsdl知道,numList有两个参数:
通过询问web service 的开发人员知道,第一个参数是int,第二个参数是int[],该方法是
Serializer->StartEnvelope("","","");
Serializer->StartBody("");
// 开始SOAP消息中的一个元素,第一个参数描述了名字空间,
// 如果它是空值,就会缺省地使用SOAP-ENV。第二、第三个参数
Serializer->StartElement("numList","http://gat
Serializer->StartElement("arg0","","STANDARD","
Serializer->WriteString("2");
Serializer->EndElement();
Serializer->StartElement("arg1","","STANDARD","
Serializer->WriteString("53");
Serializer->EndElement();
Serializer->StartElement("arg1","","STANDARD","")
Serializer->WriteString("58");
Serializer->EndElement();
查看soap监控里的信息:
C++调用 Java web service 帮助文档 2008 年 4 月
C++调用 Java web service 帮助文档 目 录 目 录.........................................................................................................................................................1 一、简介.........................................................................................................................................................2 二、使用说明.................................................................................................................................................2 2.1 安装使用 SOAP TOOLK..................................................................................................................2 2.2 使用 MSSOAP TOOKIT 3.0 监视 C++调用 WEB SERVICE............................................................................2 2.3 不使用 MSSOAP TOOKIT 3.0 监视 C++调用 WEB SERVICE........................................................................ 8 2.4 被调用的方法参数是数组的情形.....................................................................................................8 1
C++调用 Java web service 帮助文档 一、简介 在做 java 项目的时候,有时候我们需要提供一些方法给外部调用,调用者可以处在网络上的任何位置,只要 通过特定的设置就可以调用 java 提供的方法。在 java 中,我们可以通过把这些方法做成 web service。本文档 主要对用 Visual C++调用 java 做的 webservice 进行一系列的说明 二、使用说明 C++调用 web service 的实质是:发送 soap 请求并得到返回的结果。用 C++调用 java 的 webservice,发现 与调用微软的 webservice 还是不同的,用其自带的例子无法实现与 java 做的 webservice 通讯,下面和大家 分享一下实现的方法。 1.首先,需要安装微软的 mssoap tookit 3.0 工具包,可以从微软的官方网站上下载; 2.使用 java 建立一个 web 服务 ,本例子的 web service 使用开源项目 cxf 建立起来的,想了解 cxf 请登陆: http://incubator.apache.org/cxf/ 2.1 安装使用 Soap Toolk 首先 C++要调用 web service,首先要下载 mssoap tookit 3.0 工具包,并安装好。mssoap tookit 必须是 3.0,否则会出现错误。默认安装好 mssoup tookit 3.0 後,就可以使用 C++来调用 webservice 了。这时候可以使用 mssoap tookit 3.0 来监控 C++的 soap 请求。现在假设网络上有 一个 web service:http://192.168.0.10:8082/ServiceGateway/ServiceServer,下面就这个 web service 来详细描述使用 mssoap tookit 3.0 来监控 C++调用 web service 的情形和不监控的情形, 2.2 使用 mssoap tookit 3.0 监视 C++调用 web service 要想使用 mssoap tookit 3.0 来监控,首先请打开 Trace Utility。 打开时候请新建一个 Formatted Trace,如下图 2
C++调用 Java web service 帮助文档 这时候会弹出一个如下图的窗口: Local port,可以自己定义,使用本机上的一个空闲的端口即可,本例设置为:8080,该 端口的意义:以后使用该端口来发送 soap 请求,Destination:localhos 中的 localhost 请设置为 web service 的 IP,本例应该设置为:192.168.0.10,Destination:80 请设置为 web service 的端口, 本例设置为:8082,设置好之后就可以通过 localport 来监控 soap 请求了。 先查看 wsdl 文件:http://192.168.0.10:8082/ServiceGateway/ServiceServer?wsdl - - - - -
C++调用 Java web service 帮助文档 type="xsd:int" /> - - - - - - - - - - - - - 4
C++调用 Java web service 帮助文档 - - - - - - - - - location="http://192.168.0.10:8082/ServiceGateway/ServiceServer" />
C++调用 Java web service 帮助文档 #include "stdafx.h" #include #import "msxml4.dll" using namespace MSXML2; #import "C:\Program Files\Common Files\MSSoap\Binaries\mssoap30.dll" \ exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", \ "_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME") using namespace MSSOAPLib30; void Add() { ISoapSerializerPtr Serializer; ISoapReaderPtr Reader; ISoapConnectorPtr Connector; // Connect to the service. Connector.CreateInstance(__uuidof(HttpConnector30)); //使用 EndPointURL 属性指定 Web 服务,因为使用 soap tookit3.0 来监控,所以使用本地的 8080 端口来 发送 soap 请求 Connector->Property["EndPointURL"] = "http://localhost:8080/ServiceGateway/ServiceServer"; //这是不使用 mssoap tookit 3.0 来监控的情形,需要直接发送请求到远端的端口。 // Connector->Property["EndPointURL"] = "http://192.168.0.10:8082/ ServiceGateway/ServiceServer "; Connector->Connect(); // 开始消息 // //在与服务器连接后,我们需要指定 Web 服务完成的操作。 //为了指定该操作,我们需要再次使用 SoapConnector 的 Property 属性 Connector->Property["SoapAction"] = "http://localhost:8080/ServiceGateway/ServiceServer"; //这是不使用 mssoap tookit 3.0 来监控的情形 //Connector->Property["SoapAction"] = " http://192.168.0.10:8082/ ServiceGateway/ServiceServer "; Connector->BeginMessage(); // Create the SoapSerializer object. Serializer.CreateInstance(__uuidof(SoapSerializer30)); // Connect the serializer object to the input stream of the connector object. Serializer->Init(_variant_t((IUnknown*)Connector->InputStream)); // 创建 SOAP 消息 Serializer->StartEnvelope("","",""); Serializer->StartBody(“”); // 开 始 SOAP 消 息 中 的 一 个 元 素 , 第 一 个 参 数 描 述 了 名 字 空 间 , 是 wsdl 文 件 中 的 : //targetNamespace="http://gateway/" // 如果它是空值,就会缺省地使用 SOAP-ENV。第二、第三个参数 6
C++调用 Java web service 帮助文档 //调用 login 方法,参数名由 wsdl 文件决定: // // // // // Serializer->StartElement("login","http://server.hw/","STANDARD",""); Serializer->StartElement("arg0","","STANDARD",""); Serializer->WriteString("cellcom"); Serializer->EndElement(); Serializer->EndElement(); Serializer->EndBody(); Serializer->EndEnvelope(); // 将该消息发送给 web 服务 Connector->EndMessage(); // // 读取响应 . } Reader.CreateInstance(__uuidof(SoapReader30)); // 将 reader 联接到 connector 的输出字符串 Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), ""); // 显示结果 printf("Answer: %s\n", (const char*)Reader->RpcResult->text); return; int main(int argc, char* argv[]) { CoInitialize(NULL); Add(); CoUninitialize(); return 0; } 上面的代码是一个完整的 C++调用 web service 的情形,运行之后会发现 Trace Utility 里有些信 息,如下图: 7
分享到:
收藏