我正在创建一个使用 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;
}
}
}
你需要使用一个IClientMessageInspector
在构建请求时更改请求。这个问题 https://stackoverflow.com/questions/964433/how-to-add-a-custom-header-to-every-wcf-calls非常相似,应该会给你答案。
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)