2

我正在创建一个使用 Web 服务的 .NET 应用程序。我需要在对该 Web 服务的请求中将连接 http 标头设置为“关闭”。我已经在谷歌上搜索了一天,但一直没有任何工作。

我最大的努力是下面的代码,它试图覆盖 GetWebRequest 方法来添加标题。这似乎失败了 - 我在其中放置了一个断点,当我运行我的应用程序时,断点永远不会被命中,并且连接标头似乎没有设置(我不是通过查看 http 标头而是通过行为来评估这一点处理网络请求的系统)。

一些信息:当我使用 Visual Studio 添加 Web 引用时,我在解决方案资源管理器中右键单击项目,选择“添加服务引用”、“高级”,然后选择“添加 Web 引用”。

namespace System.Net
{
    public class MyHttpProtocol : SoapHttpClientProtocol
    {
        protected override WebRequest GetWebRequest(Uri uri)
        {
            HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
            webRequest.Headers.Add("connection", "closed");
            return webRequest;
        }
    }
}
4

1 回答 1

-1

您需要使用 anIClientMessageInspector来更改正在构建的请求。这个问题非常相似,应该会给你答案。

WCF 中的许多事情涉及创建行为并在 Web 配置中指定它们以覆盖该过程的某些方面,这可能有点繁琐但非常强大。您可以在其中添加您的请求。

编辑以解决您的评论,您的代码看起来像这样吗?

public object BeforeSendRequest(
    ref System.ServiceModel.Channels.Message request,
    System.ServiceModel.IClientChannel channel)
{
    var httpRequestMessage = new HttpRequestMessageProperty();
    httpRequestMessage.Headers.Add("connection", "closed");
    request.Properties.Add(
        HttpRequestMessageProperty.Name, httpRequestMessage);
    return null;
}
于 2013-06-21T15:10:57.887 回答