关于webservices的一些问题
最近在和一些公司做webservices对接,其中有.NET 调用.NET,也有.NET调用Java。 .NET调用.NET写的web服务 .NET和.NET的对接比较简单。只要知道对方的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(); ????????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格式的例子
<?
xml?version="1.0"?encoding="UTF-8"
?>
.net里默认的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 >
<?
xml?version="1.0"?encoding="utf-8"
?>
msdn上的一篇文章讲
如何:控制 Web 服务方法的总体 SOAP Body 的格式设置
< 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 > ------------------------------------------------------------------------------ 最近在做一些接口方面的工作,肯定还有很多没顾及到的东西。也希望大家能多讨论一些。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |