关于webservices的一些问题

本文介绍了.NET与.NET、.NET与Java之间的WebService对接方法,包括添加Web引用、使用wsdl.exe工具、直接发送SOAP请求等,并探讨了SOAPHeader验证及限制登录IP等安全性措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在和一些公司做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 的格式设置

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值