最近在和一些公司做webservices对接,其中有.NET 调用.NET,也有.NET调用Java。
.NET调用.NET写的web服务
.NET和.NET的对接比较简单。只要知道对方的web服务编码文件(.asmx)或者web服务描述文件(.wsdl),在项目中添加web应用即可。
同理,如果是你为对方提供web服务,只要提供上面的文件即可。
安全性方面我们是用了下面两个方法,如果有其他方法,不妨一起讨论:
1、soapheader验证
{
public string Username;
public string Password;
public ProductSoapHeader() { }
public ProductSoapHeader( string u, string p)
{
Username = u;
Password = p;
}
}
2、限制登入ip
.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请求的示例:
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(Server.MapPath( " user.xml " ));
string data = xmldoc.InnerXml;
string url = " XXX " ;
string result = null ;
getResponse(url, data, ref result);
// others
}
}
/// <summary>
/// 发送SOAP请求
/// </summary>
/// <param name="url"> 地址 </param>
/// <param name="datas"> 请求内容 </param>
/// <param name="result"> 返回结果 </param>
public void getResponse( string url, string datas, ref string result)
{
ASCIIEncoding encoding = new ASCIIEncoding();
byte [] data = encoding.GetBytes(datas);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = true ;
request.Method = " POST " ;
request.ContentType = " text/xml; charset=utf-8 " ;
request.UserAgent = " Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) " ;
request.ContentLength = data.Length;
Stream stream = request.GetRequestStream();
stream.Write(data, 0 , data.Length);
stream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = reader.ReadToEnd();
reader.Close();
}
-------------------------------补充-------------------------------------
一个SOAP格式的例子
< 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 </ email >
< fname > XXX </ fname >
< lname > XXX </ lname >
< password > XXX </ password >
</ UserInfo >
</ e:RegisterUser >
</ soap:Body >
</ soap:Envelope >
< 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 </ Street >
< City > string </ City >
< Zip > string </ Zip >
</ MyAddress >
< useZipPlus4 > boolean </ useZipPlus4 >
</ DocumentWrappedLiteral >
</ soap:Body >
</ soap:Envelope >
------------------------------------------------------------------------------
最近在做一些接口方面的工作,肯定还有很多没顾及到的东西。也希望大家能多讨论一些。