我試圖發送一個cookie到服務器。但是當它,它拋出一個奇怪的例外,我無法跟蹤:HttpwebRequest - 異常來自HRESULT:0x800710DD
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";
This Works!
所以我認爲一些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
這兩個請求的唯一區別是這個l ine:
Set-Cookie: PHPSESSID=j0g94fgvum0flhlop5868gjkklc5bh1v; path=/; HttpOnly
這告訴我設置cookie發送給它。
這很令人沮喪。這是一個API錯誤?或者我錯過了什麼?我無法修改服務器的行爲,所以我不能100%確定這是原因。
任何想法?
更新:這隻發生在x64平臺!我開始想,也許這是一個heisengbug ...
Update2:不,這發生在所有平臺上。我只是沒有徹底測試:(
Update3:這是無望的。我將嘗試切換到插槽以查看是否有幫助
謝謝!我通過使用這個新的CookieManager解決了這個問題。給予好評! – user1510539