HttpwebRequest - HRESULT: 0x800710DD的异常

3

我尝试向服务器发送Cookie,但它会抛出一个奇怪的异常,我无法追踪:

Message "The operation identifier is not valid. (Exception from HRESULT: 0x800710DD)"   string
StackTrace  "   at Windows.Web.Http.Filters.HttpBaseProtocolFilter.SendRequestAsync(HttpRequestMessage request)\r\n   at System.Net.Http.HttpHandlerToFilter.<SendAsync>d__1.MoveNext()"    string

抛出异常的代码行:
Request.BeginGetResponse( new AsyncCallback( GetResponseCallback ) , Request );

一开始我并没有意识到这是一个cookie问题,直到我注释掉了这行代码:

WCRequest.CookieContainer = WBackgroundTransfer.Cookies;

如果上面的行被注释掉,那么异常就会消失。因此我尝试了另一种方法:
CookieContainer CC = new CookieContainer();
CC.Add( new Cookie( "aa", "bb" ) );
WCRequest.CookieContainer = CC;

上述代码不会抛出任何异常。接下来,我将继续修改我的代码:
CookieContainer CC = new CookieContainer();
foreach( Cookie C in WBackgroundTransfer.Cookies.GetCookies( ReqURI ) )
{
    CC.Add( new Cookie( C.Name, C.Value, C.Path, C.Domain ) );
}
WCRequest.CookieContainer = CC;

异常又出现了!

然后我尝试再次修改代码:

WCRequest.Headers[ HttpRequestHeader.Cookie ] = WBackgroundTransfer.Cookies.GetCookieHeader( ReqUri );

异常仍然存在。我修改了代码如下:
WCRequest.Headers[ HttpRequestHeader.Cookie ] = "ab=cd";

这个有效!

所以我认为某些cookie导致了这个问题。我继续比较服务器响应。

我发送给服务器的确切cookie是:

PHPSESSID=j0g94fgvum0flhlop5868gjkklc5bh1v

当我将上述cookie发送到服务器时,响应如下:
HTTP/1.1 200 OK
Date: Fri, 06 Nov 2015 16:51:13 GMT
Content-Type: application/xml
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=dd4e3badd19f3f67e86fe1431b7fe895a1446828673; expires=Sat, 05-Nov-16 16:51:13 GMT; path=/; domain=.example.com; HttpOnly
Set-Cookie: PHPSESSID=j0g94fgvum0flhlop5868gjkklc5bh1v; path=/; HttpOnly
Vary: Accept-Encoding
Server: nginx
CF-RAY: 24124d464d493439-HKG

当我发送一个随机的、无关的 cookie,或者不给服务器任何 cookie 时:
HTTP/1.1 200 OK
Date: Fri, 06 Nov 2015 16:53:24 GMT
Content-Type: application/xml
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=d0a29df98a2984c4f5c4b2ddbc900fde01446828804; expires=Sat, 05-Nov-16 16:53:24 GMT; path=/; domain=.example.com; HttpOnly
Vary: Accept-Encoding
Server: nginx
CF-RAY: 2412507ad4c6330d-HKG

这两个请求的唯一区别是这行代码:
Set-Cookie: PHPSESSID=j0g94fgvum0flhlop5868gjkklc5bh1v; path=/; HttpOnly

这告诉我要在发送到它的地方设置cookie。

这非常令人沮丧。这是API的bug吗?还是我遗漏了什么?我无法修改服务器行为,所以我不能100%确定这是原因。

有什么想法吗?

更新:这只发生在x64平台!我开始认为这可能是一个Heisengbug...

更新2:不,这在所有平台上都会发生。我只是没有彻底测试它:(

更新3:这是没有希望的。我将尝试切换到套接字看看是否有帮助

2个回答

2

您是否查看过这个解决方案:https://dev59.com/zJHea4cB1Zd3GeqPnlS_#33863365

您可以删除您不需要的额外 cookie。

HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
HttpCookieManager cookieManager = filter.CookieManager;
foreach (HttpCookie cookie in cookieManager.GetCookies(uri))
{
    cookieManager.DeleteCookie();
}

谢谢!我通过使用这个新的CookieManager解决了这个问题。点赞! - user1510539

1
如果有人遇到这个问题,我通过清除项目中生成的库来神奇地解决了它。即删除以下目录:
obj/*
bin/*
Debug/*
ARM/*
Release/*
x64/*

更新1:我刚刚注意到HttpWebRequest会在内部设置Cookies并自动发送它们。这是它应该做的吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接