.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
