我正在创建一个使用Web服务的.NET应用程序。我需要在对该Web服务的请求中将连接http标头设置为“已关闭”。我一直在谷歌搜索这一天,但一直无法工作。
我最大的努力是下面的代码,它试图覆盖GetWebRequest方法来添加标头。这似乎失败了 - 我在其中放置了一个断点,当我运行我的应用程序时,断点永远不会被点击,连接头似乎没有设置(我正在评估这不是通过查看http标头而是通过行为处理Web请求的系统)。
一些信息:当我使用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;
}
}
}
答案 0 :(得分:-1)
您需要使用IClientMessageInspector
来更改正在构建的请求。 This question非常相似,应该给你答案。
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;
}