这几天帮朋友弄一个dotnet 的webservice调用java webservice程序,java这方为服务器端,提供服务,使用XFire写的,客户端用的是dotnet,我们都知道,webservice是用soap协议传输的,不同语言都支持这个协议dotnet更不用说了,dotnet可以根据提供的wsdl描述语言来生成调用程序,这一步肯定是没有问题的。但wsdl指令并不能生成头部,需要程序员自己手动添加。
问题就出在这个头部信息,先来看一个代码
声明自己携带的头部,这个成员变量作为客户端动态调用程序的一部分
public MySoapHeader header;
为服务方法声明头部
[System.Web.Services.Protocols.SoapHeaderAttribute("header")]
public string method([System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] string p0, [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] string p0, [System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] string p2)
声明自己的头部类:
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "")]
[System.Xml.Serialization.XmlRootAttribute(ElementName = "token", IsNullable = false)]
public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
{
/// <remarks/>
public string username;
/// <remarks/>
public string password;
}
username和password是需要验证的参数名称,这个名称必须与提供服务代码的名称一致,
注意红色的字体,这些地方必须和提供服务的那一方一致,否则就不能连接上服务器,并且会产生很多莫名其妙的错误,这些红色的地方区分大小写,以上头部信息产生的xml为:
<header > <token> <username>aaa</username> <password>pp</password> </token> </header>
这个格式必须和服务端的一致,否则请求将会失败