打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【原创】用Visual C 客户端调用Weblogic的Webservice
【原创】用Visual C++客户端调用Weblogic的Webservice
提交时间: Nov 10, 2006 1:31:44 PM 加3分  引用回复  发消息
用Visual C调用weblogic webservice.pdf (75.6 K)
前段时间研究了以下用Visual C++调用weblogic的webservice,发现与调用微软的webservice还是不同的,用其自带的例子无法实现与weblogic的webservice的通讯,下面和大家分享一下实现的方法。
1.首先,需要安装微软的mssoap tookit 3.0工具包,可以从微软的官方网站上下载;
2.使用weblogic的workshop建立一个web服务  。
代码如下所示:
public class add implements com.bea.jws.WebService
{
static final long serialVersionUID = 1L;
/**
* @common:operation
*/
public int AddNumbers(int NumberOne,int NumberTwo)
{
return NumberOne+NumberTwo;
}
}
仅仅完成一个加法运算即可。
3.查看wsdl文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- @editor-info:link autogen="true" source="add.jws" -->
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:conv="http://www.openuri.org/2002/04/soap/conversation/" xmlns:cw="http://www.openuri.org/2002/04/wsdl/conversation/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:jms="http://www.openuri.org/2002/04/wsdl/jms/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://www.openuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://www.openuri.org/">
<types>
<s:schema elementFormDefault="qualified" targetNamespace="http://www.openuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema">
<s:element name="AddNumbers">
<s:complexType>
<s:sequence>
<s:element name="NumberOne" type="s:int"/>
<s:element name="NumberTwo" type="s:int"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="AddNumbersResponse">
<s:complexType>
<s:sequence>
<s:element name="AddNumbersResult" type="s:int"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="int" type="s:int"/>
</s:schema>
</types>
<message name="AddNumbersSoapIn">
<part name="parameters" element="s0:AddNumbers"/>
</message>
<message name="AddNumbersSoapOut">
<part name="parameters" element="s0:AddNumbersResponse"/>
</message>
<message name="AddNumbersHttpGetIn">
<part name="NumberOne" type="s:string"/>
<part name="NumberTwo" type="s:string"/>
</message>
<message name="AddNumbersHttpGetOut">
<part name="Body" element="s0:int"/>
</message>
<message name="AddNumbersHttpPostIn">
<part name="NumberOne" type="s:string"/>
<part name="NumberTwo" type="s:string"/>
</message>
<message name="AddNumbersHttpPostOut">
<part name="Body" element="s0:int"/>
</message>
<portType name="addSoap">
<operation name="AddNumbers">
<input message="s0:AddNumbersSoapIn"/>
<output message="s0:AddNumbersSoapOut"/>
</operation>
</portType>
<portType name="addHttpGet">
<operation name="AddNumbers">
<input message="s0:AddNumbersHttpGetIn"/>
<output message="s0:AddNumbersHttpGetOut"/>
</operation>
</portType>
<portType name="addHttpPost">
<operation name="AddNumbers">
<input message="s0:AddNumbersHttpPostIn"/>
<output message="s0:AddNumbersHttpPostOut"/>
</operation>
</portType>
<binding name="addSoap" type="s0:addSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="AddNumbers">
<soap:operation soapAction="http://www.openuri.org/AddNumbers" style="document"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<binding name="addHttpGet" type="s0:addHttpGet">
<http:binding verb="GET"/>
<operation name="AddNumbers">
<http:operation location="/AddNumbers"/>
<input>
<http:urlEncoded/>
</input>
<output>
<mime:mimeXml part="Body"/>
</output>
</operation>
</binding>
<binding name="addHttpPost" type="s0:addHttpPost">
<http:binding verb="POST"/>
<operation name="AddNumbers">
<http:operation location="/AddNumbers"/>
<input>
<mime:content type="application/x-www-form-urlencoded"/>
</input>
<output>
<mime:mimeXml part="Body"/>
</output>
</operation>
</binding>
<service name="add">
<port name="addSoap" binding="s0:addSoap">
<soap:address location="http://localhost:7001/add/add.jws"/>
</port>
<port name="addHttpGet" binding="s0:addHttpGet">
<http:address location="http://localhost:7001/add/add.jws"/>
</port>
<port name="addHttpPost" binding="s0:addHttpPost">
<http:address location="http://localhost:7001/add/add.jws"/>
</port>
</service>
</definitions>
查看的目的是得到:targetNamespace=http://www.openuri.org/
可以填写在客户端的代码中。
4.运行weblogic workshop的webservice测试工具,通过查看源代码,得到其webservice的地址。注意,这一步和微软的例子是不同的。
得到按钮提交的地址是:http://localhost:7001/add/add.jws/AddNumbers
5.用vc建立一个console的程序,其全部代码如下:
#include <stdio.h>
#include <stdio.h>
#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));
Connector->Property["EndPointURL"] = "http://localhost:7001/add/add.jws/AddNumbers";
Connector->Connect();
// Begin the message.
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));
// Build the SOAP Message.
Serializer->StartEnvelope("","STANDARD","");
Serializer->StartBody("");
Serializer->StartElement("AddNumbers","http://www.openuri.org/","","");
//Serializer->StartElement("AddNumbers xmlns=\"http://www.openuri.org/\" ","","","");
//Serializer->StartElement("AddNumbers","","STANDARD","");
Serializer->StartElement("NumberOne","http://www.openuri.org/","","");
Serializer->WriteString("5");
Serializer->EndElement();
Serializer->StartElement("NumberTwo","http://www.openuri.org/","","");
Serializer->WriteString("10");
Serializer->EndElement();
Serializer->EndElement();
Serializer->EndBody();
Serializer->EndEnvelope();
// Send the message to the XML Web service.
Connector->EndMessage();
// Read the response.
Reader.CreateInstance(__uuidof(SoapReader30));
// Connect the reader to the output stream of the connector object.
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
// Display the result.
printf("Answer: %s\n", (const char*)Reader->RpcResult->text);
return;
}
int main()
{
CoInitialize(NULL);
Add();
CoUninitialize();
return 0;
}
6.运行结果,如下:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
CXF创建webservice客户端和服务端
CXF MyEclipse 开发webservice入门实例之HelloWorld
通过HttpClient请求webService
利用AXIS开发Webservice(五) —— 如何传递文件
WebService工作原理
五、CXF WebService整合Spring
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服