.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

posted @ 2012-11-22 15:04  老齐编程  阅读(3102)  评论(1编辑  收藏  举报