我在C#中制作asmx Web服务,并尝试使用简单的客户端应用程序进行测试。我编写了Web服务的内部代码,但是我必须遵循给定的xml来发布和响应。它应该接收带有身份验证信息的标头并返回令牌和注释。两个方向的标题包含相同的类型,但一半的字段仅用于输入,一半仅用于输出。
标题类的定义大致如下:
public class CustomHeader : SoapHeader
{
public string InParam;
public string OutParam;
}
Web服务方法代码如下所示:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService_UD : System.Web.Services.WebService
{
public CustomHeader customHeader;
[WebMethod]
[SoapHeader("customHeader", Direction = SoapHeaderDirection.InOut)]
public string CustomWebMethod (int param1, string param2)
{
// code reading inner fields of customHeader
// code updating other inner fields of customHeader
// code dealing with other parameters and creating normal return value
}
}
测试客户端应用程序如下:
WebService_UDClient caller = new WebService_UDSoapClient();
CustomHeader header = new CustomHeader();
header.InParam = "blip";
string response = caller.CustomWebMethod(header, 1, "1");
string outParam = header.OutParam; // returns null here
网络服务似乎无法更改标头。更改标题的InParam也不会在客户端中更改它。问题可能是我没有通过引用传递标题,但我不知道如何更改Web服务代码(因为其余部分是自动生成的)以通过引用传递。
那么我该怎么做,或者如何以其他方式检索响应头?