當(dāng)前位置:
主頁(yè)>
雜項(xiàng)技術(shù)>
.NET(C#)>
Herosword 原創(chuàng) 一. MS SOAP Toolkit 3.0 下載和安裝 在微軟的網(wǎng)站上可以下載到該工具.安裝選擇默認(rèn)安裝。 二. 設(shè)置IIS虛擬目錄 在MS SOAP Toolkit 3.0中, ISAPI 處理程序?yàn)?SOAPIS30.DLL 文件 安裝好 SOAP Toolkit 3.0后, 有一個(gè)文件 SOAPVDIR.CMD可以幫助我們?cè)O(shè)置虛擬
TAG:
Herosword 原創(chuàng)
一. MS SOAP Toolkit 3.0 下載和安裝
在微軟的網(wǎng)站上可以下載到該工具.安裝選擇默認(rèn)安裝。
二. 設(shè)置IIS虛擬目錄
在MS SOAP Toolkit 3.0中, ISAPI 處理程序?yàn)?SOAPIS30.DLL 文件
安裝好 SOAP Toolkit 3.0后, 有一個(gè)文件 SOAPVDIR.CMD可以幫助我們?cè)O(shè)置虛擬目錄
,并SOAPIS30.DLL與該目錄中對(duì) .WSDL文件的請(qǐng)求做關(guān)聯(lián),也可以手工設(shè)置IIS目錄,并配置目錄屬性, 加入SOAPIS30.DLL做為 .WSDL請(qǐng)求的處理程序.
使用 SOAPVDIR.CMD 腳本工具:
命令格式:
SOAPVDIR [command vdirname [directory path]] [-s: server] [-w: root]
具體命令可以用 SOAPVDIR.CMD HELP來(lái)查看.
手工建立 .WSDL與SOAPIS30.DLL的映射
打開IIS, 選擇一個(gè)站點(diǎn)或虛擬目錄,右鍵選擇屬性:在主目錄或虛擬目錄中選擇應(yīng)用程序設(shè)置,如圖:
點(diǎn)擊添加,為WSDL文件增加一種應(yīng)用程序映射。
在可執(zhí)行文件輸入框輸入:
C:\\PROGRA~1\\COMMON~1\\MSSOAP\\BINARIES\\SOAPIS30.DLL
在擴(kuò)展名輸入框輸入:.WSDL
選擇限于:GET,POST,HEAD
(如圖)
點(diǎn)擊確認(rèn):(如圖)
以上步驟,實(shí)際上是為Server配置了一個(gè)ISAPI Listener, 還可以配置一種Listener, ASP Listener.
三.開發(fā)和部署一個(gè)Web Service
首先建立一個(gè)ATL工程,實(shí)現(xiàn)一個(gè)Simple Object接口
編譯成功后,用SOAPToolkit 3.0的WSDL Generator工具,生成 WebService的WSDL和WSML,生成的文件保存到剛才設(shè)置的IIS的虛擬目錄中。
三. 用 SOAPClient30 Object 開發(fā) SOAP客戶端程序
SOAPClient Object實(shí)現(xiàn)在MSSOAP30.DLL中,我們需要引入 MSSOAP30.DLL類型庫(kù)
#import "C:\\WINNT\\system32\\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;
// TestClient.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void Add()
{
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;
// Connect to the service.
Connector.CreateInstance(__uuidof(HttpConnector30));
Connector->Property["EndPointURL"] = "
;;Connector->Connect();// Begin the message.//Connector->Property["SoapAction"] = "uri:AddNumbers";Connector->Property["SoapAction"] = ";;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("","","");Serializer->StartBody("");Serializer->StartElement("Add","Serializer->StartElement("lOp1","","","");
Serializer->WriteString("2");
Serializer->EndElement();
Serializer->StartElement("lOp2","","","");
Serializer->WriteString("13");
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);
}
int main(int argc, char* argv[])
{
CoInitialize(NULL);
Add();
CoUninitialize();
return 0;
} (Herosword)