2010-10-12 35 views
3

我正在嘗試使用sessionID從c#應用程序中調用Web服務。
爲了做到這一點,我需要在cookie中設置「域名」標題。我應該給這個cookie什麼域名?

在Fiddler中,它看起來像 - 「ASP.NET_SessionId = izdtd4tbzczsa3nlt5ujrbf5」(cookie中沒有指定域名)。

Web服務位於 - 「http:// [有些ip在這裏]:8989/MyAPI.asmx」。

我已經試過:
HTTP:// [IP],
HTTP:// [IP]:8989,
HTTP:// [IP]:8989/MyAPI.asmx

所有這些都會導致運行時錯誤。

我也嘗試了單獨使用ip的(即100.10.10.10),它不會導致運行時錯誤,並設置了cookie,但是當我調用web方法時cookie永遠不會被髮送。

這是我設置的域代碼:

if (!string.IsNullOrEmpty(currentSessionID)) 
{ 
    req.CookieContainer=new CookieContainer(); 
    Cookie cookie = new Cookie("ASP.NET_SessionId", currentSessionID); 
    cookie.Domain = GetCookieUrl(); //<- What should this be? 
    req.CookieContainer.Add(cookie); 
} 

那麼應該怎麼領域是什麼?

謝謝。

+0

你有沒有試過10。0.0.1:8989?忽略http://部分... – 2010-10-12 15:55:13

+0

@Aaron - 編譯時錯誤 – 2010-10-12 15:57:05

+0

您可以發佈指示的鏈接,告訴您需要設置域嗎?我從來沒有聽說過調用Web服務的這種要求,我很好奇。一直在尋找新的東西。 – David 2010-10-12 16:00:25

回答

0

Cookie未被髮送的原因是請求的內容長度應該在之後設置爲,而不是在之前。
該域名是單獨的IP。

1

我相信它應該只是[ip]。放下你嘗試過的http://部分。

this page MSDN上,你的代碼應該是

cookie.Domain = "100.10.10.10"; 

接下來,正是錯誤你好嗎?另外,您是否將編譯錯誤與運行時錯誤混淆?我發現很難相信你會得到一個編譯錯誤,因爲Domain是一個String屬性,這意味着你可以在其中添加任何東西。

最後,你爲什麼要發送一個cookie到Web服務?正常的方法是在表單發佈或查詢字符串中傳遞所有內容。


更新

順便說一句,如果你絕對必須一個cookie添加到頭部,以便將其傳遞到Web服務,你這樣做是(從here採取)的方式:

byte[] buffer = Encoding.ASCII.GetBytes("fareId=123456"); //the data you want to send to the web service 
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url); 
WebReq.Method = "POST"; 
WebReq.ContentType = "application/x-www-form-urlencoded"; 
WebReq.ContentLength = buffer.Length; 
WebReq.Headers["Cookie"] = "ASP.NET_SessionId=izdtd4tbzczsa3nlt5ujrbf5" 

Stream PostData = WebReq.GetRequestStream(); 

請注意,這將設置標頭與請求內聯,而不實例化「cookie」對象。 Cookie的Domain屬性有助於確保Cookie僅發送到列出的域。但是,如果您正在啓動請求並嘗試向其附加一個cookie,那麼最好的方法是將其作爲字符串添加到請求標頭中。

+0

我已經嘗試過IP(正如我在問題中寫的),cookie然後在我調用Web服務時不會發送。 – 2010-10-12 15:55:10

+0

@Oren A:查看更新。 – NotMe 2010-10-12 16:04:25

+0

你是對的「時間」,Cookie是.NET的cookie(我應該嘗試httpCookie?),當我只發送一個請求的IP時,它不會在我調用請求時發送(我知道來自Fiddler) 。至於爲什麼發送一個cookie,我很確定這就是瀏覽器的功能(同樣,Fiddler) – 2010-10-12 16:08:57

0
// Simple function to get cookie domain 
private string GetCookieDomain(string uri) 
{ 
    Uri req_uri = new Uri(uri); 
    return req_uri.GetComponents(UriComponents.Host, UriFormat.Unescaped); 
}