微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于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" ?>
< 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 >
    
< DocumentWrappedLitera 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 的格式设置

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐