- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力解决这个错误:
https://github.com/openstacknetsdk/openstack.net/issues/333
问题涉及 ProtocolViolationException
带有以下消息:
Chunked encoding upload is not supported on the HTTP/1.0 protocol.
ServicePoint.HttpBehaviour
值为
HttpBehaviour.HTTP10
的属性在 502 响应之后。
catch
block 中)解决问题。此代码“隐藏”
ServicePoint
由来自
ServicePointManager
的失败请求创建的实例, 强制它创建一个新的
ServicePoint
为下一个请求。
public void TestProtocolViolation()
{
try
{
TestTempUrlWithSpecialCharactersInObjectName();
}
catch (WebException ex)
{
ServicePoint servicePoint = ServicePointManager.FindServicePoint(ex.Response.ResponseUri);
FieldInfo table = typeof(ServicePointManager).GetField("s_ServicePointTable", BindingFlags.Static | BindingFlags.NonPublic);
WeakReference weakReference = (WeakReference)((Hashtable)table.GetValue(null))[servicePoint.Address.GetLeftPart(UriPartial.Authority)];
if (weakReference != null)
weakReference.Target = null;
}
TestTempUrlExpired();
}
最佳答案
问:为什么我会观察到这种行为?
A. .NET 框架对连接到 HTTP 服务器的支持基于 ServicePointManager
提供ServicePoint
实例。每个ServicePoint
实例假设它基于端点地址连接到单个“逻辑”服务。此对象缓存有关另一端服务的某些信息,其中一条信息是该服务是否支持 HTTP/1.1。如果对服务的任何请求表明该服务仅支持 HTTP/1.0,ServicePoint
"latches" into that state ,以及 ServicePointManager
只会重新创建一个新的 ServicePoint
如果/当垃圾收集器清除 WeakReference
时,则不会处于该状态指向实例。
由于以下原因,此行为可能被认为不是问题:
Stream.Size
时才依赖分 block 编码。属性抛出 NotSupportedException
. HttpWebRequest.AllowWriteStreamBuffering
至true
. 虽然我没有测试过这个解决方案,但是在浏览引用源时收集的信息表明这个属性允许实现 fall back to buffering在不支持分 block 传输的情况下,而不是简单地 throwing the ProtocolViolationException
. ServicePoint
让我的设置超时ServicePoint.MaxIdleTime
到 0。这仍然是 hacky,但不依赖反射,应该仍然适用于 Mono。修改后的代码如下所示。public void TestProtocolViolation()
{
try
{
TestTempUrlWithSpecialCharactersInObjectName();
}
catch (WebException ex)
{
ServicePoint servicePoint = ServicePointManager.FindServicePoint(ex.Response.ResponseUri);
if (servicePoint.ProtocolVersion < HttpVersion.Version11)
{
int maxIdleTime = servicePoint.MaxIdleTime;
servicePoint.MaxIdleTime = 0;
Thread.Sleep(1);
servicePoint.MaxIdleTime = maxIdleTime;
}
}
TestTempUrlExpired();
}
关于.net - 在 WebException 之后避免 ProtocolViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973178/
我是 silverlight 新手。我正在针对 Windows Phone 的 Visual Studio 2010 中进行编程。我尝试执行 HttpWebRequest 但调试器显示 Protoco
我正在努力解决这个错误: https://github.com/openstacknetsdk/openstack.net/issues/333 问题涉及 ProtocolViolationExcep
为什么 req.GetRequestStream().Close(); 会导致“ProtocolViolationException - 无法发送具有此动词类型的内容主体。”代码片段来自here .谢
我收到“System.Net.ProtocolViolationException:由于对象的当前状态,操作无效。”尝试调用时出错 var request = (HttpWebRequest)Web
我正在玩 rxJava2 并获得 io.reactivex.exceptions.ProtocolViolationException: Disposable already set! 在尝试向 Co
我不知道。我正在尝试从我为 Windows Phone 构建的应用程序上的 REST 服务获取 XML。我总是在以下行遇到异常: HttpWebResponse response = request.
我在 .NET 中创建了一个基本的 RESTful 服务,它允许我对调用方法指定的 Uri 进行基本的 Get 和 Post 调用。在我的 post 方法中,我试图用我的 HttpWebRequest
我尝试向 google 页面发出 http 请求,但它不起作用并在我尝试获取响应时给出 ProtocolViolationException。 这是我的代码: public CookieCollec
我正在尝试从 Windows Phone 应用程序的公共(public) API 收集数据。 private void GatherPosts() { string url = baseURL
我开发了一个管理工具,我在其中使用一个简单的 HTTPListener 来返回 HTML 页面。在 IE 和 FF 上一切正常,但在使用 Google Chrome 时出现ProtocolViolat
以下代码尝试使用多部分传输、客户端信封加密和 Amazon KMS 服务处理数据加密 key ,将 17MB 的测试文件复制到 S3 存储桶。多部分块大小为 5MB。 在传输最后一个(部分) bloc
对于下面的代码,我得到以下错误, System.Net.ProtocolViolationException: You must provide a request body if you set C
我有这段代码用于在我创建的测试 gmail 帐户中添加联系人: public class SomeClass { private const string ClientId = "somecl
我用HttpListener写web server代码,但是经常出现这样的异常 "System.Net.ProtocolViolationException:Bytes to be written t
公共(public)字符串 HttpCall(string NvpRequest) 方法中出现以下异常: 'System.Net.ProtocolViolationException' {"You m
我正在开发一个 Restful API,我需要在发出实际的 DELETE 请求之前检查授权。所以我认为使用 HEAD 方法作为预检检查会很好。 我预计使用 HEAD 方法的未经授权的请求将返回没有正文
我得到了 "System.Net.ProtocolViolationException: You must write ContentLength bytes to the request strea
Q1 - 这是 .net 中的错误,还是我用于测试的网络服务器 (Mongoose) 没有以应有的格式提供 header 字段 Last-Modified? 如果我在 C# VS2008 中调用: r
我是一名优秀的程序员,十分优秀!