問題: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上調試成功!