.net調用java xfire發布的webservice封裝soapheader頭信息


.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM