加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

关于webservices的一些问题

发布时间:2020-12-17 02:12:28 所属栏目:安全 来源:网络整理
导读:最近在和一些公司做webservices对接,其中有.NET 调用.NET,也有.NET调用Java。 .NET调用.NET写的web服务 .NET和.NET的对接比较简单。只要知道对方的web服务编码文件(.asmx)或者web服务描述文件(.wsdl),在项目中添加web应用即可。 同理,如果是你为对方提

最近在和一些公司做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" ?>
< 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 >
.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 </ Street >
????????
< City > string </ City >
????????
< Zip > string </ Zip >
??????
</ MyAddress >
??????
< useZipPlus4 > boolean </ useZipPlus4 >
????
</ DocumentWrappedLiteral >
??
</ soap:Body >
</ soap:Envelope >
msdn上的一篇文章讲 如何:控制 Web 服务方法的总体 SOAP Body 的格式设置

------------------------------------------------------------------------------

最近在做一些接口方面的工作,肯定还有很多没顾及到的东西。也希望大家能多讨论一些。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读