簡體   English   中英

MVC3中帶有HttpWebRequest的異步發布

[英]Asynchronous Post with HttpWebRequest in MVC3

我遇到了我認為是預期的HttpWebRequest行為,但是由於我無法找到任何明確表示這是正確的資源,因此我想將其發布為一個問題,看看是否有人遇到過這種情況和/或可以驗證這是正確的。

首先,我有一個在IIS 7.5上運行的MVC3應用程序。 它具有1個控制器,並支持1個發布方法。 我在IIS中啟用了Windows Auth和ASP.NET模擬。 MVC3應用程序背后的想法只是提供一種簡單的服務,可用於記錄來自各種客戶端應用程序(控制台應用程序,silverlight,asp.net,AJAX等)的信息。 服務要做的一件事是使用控制器中的User屬性來記錄向該服務發布數據的人的身份。

為了簡化使用中的應用程序的處理,我創建了一些客戶端庫,Silverlight,DotNet和js庫。

除了在另一個MVC3應用程序中使用DotNet庫時,所有這些工作均按預期進行。 對於DotNet庫,我使用HttpWebRequest並使用異步方法(Begin / EndGetRequestStream)/(Begin / EndGetResponse)來發布請求。 我還在請求上將.Credentials設置為CredentialCache.DefaultCredentials,但是當日志記錄應用程序開始處理來自另一個MVC3應用程序的請求時,它將用戶顯示為接收該帖子的應用程序池的服務帳戶。

當我發現此內容時,我將帖子的同步版本添加到DotNet庫中,並發現日志記錄服務正在使用我的個人憑據。

我假設HttpWebRequest可以根據使用的上下文使用不同的DefaultCredentials。 由於這是asp.net,並且正在調用請求的異步方法,因此在客戶端MVC3應用返回響應之前,我的庫代碼甚至可能尚未完成。

我無法找到的是,是否確實如此。 如果有人能回答我,或者有一篇文章可以指出正確的方向,我將不勝感激。

提前致謝

我遇到的是預期的行為。 問題的根源在於在為異步請求提供服務時,.Net線程池中的線程將在哪種身份下執行。 在我的情況下,線程作為由應用程序池創建的應用程序域的所有者執行。 就我而言,這是一個服務帳戶。

在執行任何異步處理之前,我能夠捕獲模擬用戶的身份,並使用WindowsImpersonationContext強制我的庫代碼以模擬用戶身份運行。 通過這樣做,CredentialsCache.DefaultCredentials在HttpWebRequest實例上設置它時使用了我的憑據(模擬用戶)而不是運行應用程序池的帳戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM