淺談關于Webservices對接的一些問題
.NET調用.NET寫的Web服務
.NET和.NET的Webservices對接比較簡單。只要知道對方的web服務編碼文件(.asmx)或者web服務描述文件(.wsdl),在項目中添加web應用即可。
同理,如果是你為對方提供web服務,只要提供上面的文件即可。
安全性方面我們是用了下面兩個方法,如果有其他方法,不妨一起討論:
1、soapheader驗證
- public class ProductSoapHeader : SoapHeader
- {
- public string Username;
- public string Password;
- public ProductSoapHeader() { }
- public ProductSoapHeader(string u, string p)
- {
- Username = u;
- Password = p;
- }
- }
2、限制登入ip
- CustomerIP=HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
.NET調用Java寫的web服務
.NET調用java也需要知道它的描述文件地址,具體有以下幾種調用方法:
a)在項目中添加web應用。
b)使用wsdl.exe將wsdl文件編譯成動態庫,這樣使用起來會更加方便。
b.1)生成類文件
- wsdl.exe /l:cs /n:webser /out:C:/webser.cs c:/test.wsdl
b.2)生成動態庫
- csc /target:library /out:"c:\webser.dll" c:\webser.cs
c)直接sent SOAP request
如果對方提供了SOAP request的格式,這無疑是最直接的方法。
下面提供一個發送SOAP請求的示例:
- private void sendSoap()
- {
- XmlDocument xmldoc = new XmlDocument();
一個SOAP格式的例子
- < ?xml version="1.0" encoding="UTF-8"?>
- < soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- < soap:Body>
- < e:RegisterUser xmlns:e="XXX">
- < UserInfo>
- < email>XXX
- < fname>XXX
- < lname>XXX
- < password>XXX
- < /UserInfo>
- < /e:RegisterUser>
- < /soap:Body>
- < /soap:Envelope>
.NET里默認的SOAP格式:
- < ?xml version="1.0" encoding="utf-8"?>
- < soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
- < soap:Body>
- < DocumentWrappedLiteral xmlns="http://www.contoso.com">
- < MyAddress>
- < Street>string
- < City>string
- < Zip>string
- < /MyAddress>
- < useZipPlus4>boolean
- < /DocumentWrappedLiteral>
- < /soap:Body>
- < /soap:Envelope>
msdn上的一篇文章講如何:控制 Web 服務方法的總體 SOAP Body 的格式設置
最近在做一些接口方面的工作,肯定還有很多沒顧及到的東西。也希望大家能多討論一些。
【編輯推薦】