.NET将自定义Http标头添加到Web服务代理会引发错误

时间:2010-11-16 16:27:53

标签: .net service asmx

我需要将自定义标头附加到我的Web服务客户端。 为此,我为添加Web引用时生成的SoapHttpClientProtocol类创建了部分类。但是,我附加自定义标头时收到运行时错误。如果没有附加自定义标头,一切正常 (当我评论附加标题的代码时)。 但是,如果添加了自定义标头,那么我在运行时会收到以下错误 客户发现响应内容类型为'text / html; charset = utf-8',但预计'text / xml'。 有什么想法吗?

以下是示例代码:

 public partial class SMARTSWS : System.Web.Services.Protocols.SoapHttpClientProtocol 
{
    private NameValueCollection _customHeaders = new NameValueCollection();

    protected override System.Net.WebRequest GetWebRequest(System.Uri Uri)
    {
        // Add authentication cookie to the 
        // this object CookieContainer
        SmartsIVRSecurityManager.SetAuthToken(this);

        // Set Custom Headers
        SetCustomHeaders();

        HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(Uri);
        for (int i = 0; i <= _customHeaders.Count - 1; i++)
        {
            req.Headers.Add(_customHeaders.Keys[i], _customHeaders.GetValues(i).GetValue(0).ToString());
        }
        return req;
    }


    /// <summary>
    /// Set Custom Headers
    /// </summary>
    /// <param name="smToken"></param>
    public void SetCustomHeaders()
    {
        _customHeaders.Add("Version", "1.0");
        _customHeaders.Add("OnBehalfOf", String.Empty);
        _customHeaders.Add("Role", "1");
        _customHeaders.Add("EndPoint", "001");
        _customHeaders.Add("ServiceId", "001");
        _customHeaders.Add("DateTime", String.Empty);
        _customHeaders.Add("ClientApplication", "SmartsIVRService");
        _customHeaders.Add("TraceWebMethod", "false");
        _customHeaders.Add("ClientTouchPoint", "SmartsIVRService");
        _customHeaders.Add("ChannelInfo", "ChannelInfo");
    }
}

2 个答案:

答案 0 :(得分:1)

当您看到“text / html”类型的响应时,通常会出现一个错误页面,试图告诉您哪里出错了。使用Fiddler或其他东西来查看错误页面试图告诉你的内容。

答案 1 :(得分:0)

如果您在从基类获取请求后中断,那么webrequest内容类型会说什么?

是否设置为text / html或text / xml?我想知道你的演员是否正在改变这种类型。