2015-11-06 116 views
3

我試圖發送一個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:這是無望的。我將嘗試切換到插槽以查看是否有幫助

回答

2

你檢查這個解決方案:https://stackoverflow.com/a/33863365

您可以刪除不需要額外的餅乾。

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

謝謝!我通過使用這個新的CookieManager解決了這個問題。給予好評! – user1510539

1

如果有人遇到此問題。對我來說,它通過清除項目中生成的庫而得到神奇的解決。即刪除以下目錄:

obj/* 
bin/* 
Debug/* 
ARM/* 
Release/* 
x64/* 

更新1:我剛剛注意到的HttpWebRequest被設置在內部的Cookie自動發送它們。它應該這樣做嗎?

相關問題