C# 調用WebService 時 soapheader驗證問題!

問題:C#調用webservice時需要 soapheader中傳送對方指定的信息,.net 平臺自動生成的類中沒有相關的接口

 

實現方法:
1.C#調用java 編寫的webservice時不會自動生成 soapheader 類接口的,需要改動Reference.cs。
2.改動方法
   a、 繼承System.Web.Services.Protocols.SoapHeader ,生成一個新類(MyHeader,這裏名字無所謂),類中擴展調要webservice 試soapheader中要求的成員,名稱一定要與對方要求的一樣

 

    public class MyHeader : System.Web.Services.Protocols.SoapHeader
    {
        public string user; //= "12650000238BF747AD";
        public string pwd ;//= "70947EFA9D77E413502C24B0DD252F66";
        public MyHeader()
        {
            user = "";
            pwd = "";
        }
    }

  需要注意的是: user,pwd是對方要求的,名稱一定要一致。

 

  b、代理類中增加 成員

          public MyHeader Header;

  其中 MyHeader  的實例 Header 必須與對方要求的格式一樣,這個是血的教訓,不能像其他對象一樣隨便起名字。

 

  原格式

       <soapenv:Header>
            <ns:getPersonInfo xmlns:ns="
http://service.wondersgroup.com">
            <ns:user>12650000238BF747AD</ns:user>
            <ns:pwd>70947EFA9D77E413502C24B0DD252F66</ns:pwd>
            </ns:getPersonInfo>
       </soapenv:Header>

 

  c、Header對象的 user,pwd 成員賦值。

  d、與webservice 接口函數綁定。

       [System.Web.Services.Protocols.SoapHeader("Header")]

經過不斷的測試,才發現這些,給我忽然提示的是我在對象瀏覽器中查看public sealed class SoapHeaderAttribute類時裏面有成員MemberName,看說明,它不是節點名稱,而是節點值,那節點名稱怎麼來的呢? 忽然就想起來,節點的名稱直接取對象的名稱。所以以上紅色部分一定要注意。

以上程序 vs2008上調試成功!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章