.net調用java xfire發布的webservice封裝soapheader頭信息比較麻煩,需要改動到代理類代碼。
JAVA服務端驗證代碼
package chachaba.map.service; import org.codehaus.xfire.MessageContext; import org.codehaus.xfire.handler.AbstractHandler; import org.jdom.Element; public class AuthenticationHandler extends AbstractHandler { public void invoke(MessageContext cfx) throws Exception { if (cfx.getInMessage().getHeader() == null) { throw new org.codehaus.xfire.fault.XFireFault("請求必須包含驗證信息", org.codehaus.xfire.fault.XFireFault.SENDER); } Element token = cfx.getInMessage().getHeader().getChild("AuthenticationToken"); if (token == null) { throw new org.codehaus.xfire.fault.XFireFault("請求必須包含身份驗證信息", org.codehaus.xfire.fault.XFireFault.SENDER); } String username = token.getChild("Username").getValue(); String password = token.getChild("Password").getValue(); try { // 進行身份驗證 ,只有yw88@ccc0c325-fe67-4cad-baab-4ad9ebb4f927的用戶為授權用戶 if (username.equals("yw88") && password.equals("ccc0c325-fe67-4cad-baab-4ad9ebb4f927")) // 這語句不顯示 System.out.println("身份驗證通過"); else throw new Exception(); } catch (Exception e) { throw new org.codehaus.xfire.fault.XFireFault("非法的用戶名和密碼", org.codehaus.xfire.fault.XFireFault.SENDER); } } }
.NET調用流程如下:
1、生成代理類,如StallsService.cs
2、在代理類中添加一個SoapHeader類,完整代碼如下:
public class AuthenticationToken : SoapHeader { public string Username; public string Password; }
3、在代理類中添加SoapHeader類參數,
public AuthenticationToken Header = new AuthenticationToken();
4、在方法中添加屬性代碼
[SoapHeader("Header")] public void deleteInter([System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] string in0) { this.Invoke("deleteInter", new object[] {in0}); }
5、將代理類中的Namespace設置為空,
[System.Web.Services.WebServiceBindingAttribute(Name = "StallsServiceHttpBinding", Namespace = "")]
6、客戶端調用代碼如下:
StallsService client = new StallsService(); AuthenticationToken myHeader = new AuthenticationToken(); myHeader.Username = "username"; myHeader.Password = "password"; client.Header = myHeader; client.deleteInter("9999");
OK