2012-02-06 58 views
1

我已經運行遇到一個行爲與HttpWebRequest的,我相信是有意的,但我一直沒能找到明確表示,這是正確的任何來源,我想我會發布它作爲一個問題,看看有沒有人遇到過這個問題,或者可以驗證這是正確的。異步郵政與HttpWebRequest的在MVC3

對於初學者我在IIS 7.5上運行的應用程序MVC3。它有1個控制器並支持1個post方法。我在Windows中啓用了Windows身份驗證和ASP.NET模擬。 MVC3應用程序背後的想法就是擁有一個簡單的服務,可用於從各種客戶端應用程序(控制檯應用程序,silverlight,asp.net,AJAX等)記錄信息。服務所做的一件事是使用控制器的用戶屬性來記錄誰將數據發佈到此服務的人員。

爲了簡化我創建了一些客戶端庫,Silverlight中,DOTNET的,和一個js庫消費應用程序的處理。

這一切都制定了預期使用其他MVC3應用程序中的DOTNET的庫時除外。對於DotNet庫,我使用HttpWebRequest並使用異步方法(Begin/EndGetRequestStream)/(Begin/EndGetResponse)發佈請求。我還將請求上的.Credentials設置爲CredentialCache.DefaultCredentials,但是當日志記錄應用程序從另一個MVC3應用程序開始處理請求時,它會將User顯示爲從其接收帖子的應用程序池的服務帳戶。

當我發現這一點,我添加了郵寄到DOTNET的庫的同步版本,發現日誌服務,用我個人的憑據。

我假定HttpWebRequest的可以使用,這取決於其使用的上下文不同的DefaultCredentials。由於這是asp.net,並且正在調用請求的異步方法,所以我的庫代碼在客戶端MVC3應用程序返回響應之前可能還沒有完成。

我一直沒能找到是,如果這是明確的情況下,還是不行。如果任何人有答覆或者或者能夠指引我朝着正確方向的文章,我將不勝感激。

在此先感謝

+0

這看似和奇怪的問題,但什麼樣的網絡瀏覽器您使用的? – CrazyCoderz 2012-02-07 04:23:26

+0

我使用IE 8.我已經想通了這個問題。 – MeyC 2012-02-07 13:50:47

回答

0

我是遇到了預期的行爲。問題的根源歸結到其下的身份服務於異步請求時就從.NET線程池中的線程執行。在我的情況下,線程正在作爲應用程序池創建的應用程序域的所有者執行。在我的情況下,這是一個服務帳戶。

我能夠在開始任何異步處理之前捕獲模擬用戶的身份,並使用WindowsImpersonationContext強制我的庫代碼作爲模擬用戶運行。通過這樣做CredentialsCache.DefaultCredentials使用我的憑據(模擬用戶)而不是在HttpWebRequest的情況下設置,當它運行的應用程序池的帳戶。