2010-07-29 36 views
4

我想在網站上使用WCF命名管道,它的錯誤與失敗:使用WCF的net.pipe與冒充= true的網站

有沒有終點,在net.pipe聽:// localhost/mypipename 可以接受該消息。這通常是由不正確的地址或SOAP操作導致的。有關更多 的詳細信息,請參閱InnerException(如果存在)。

和的InnerException:

The pipe name could not be obtained for net.pipe://localhost/mypipename. 

,有另一個內部異常給人一種access denied消息。

我的網站使用模擬,並環顧網絡,這似乎是相關的,但我不知道如何解決它。

有沒有人有任何想法?

感謝 馬特

回答

0

我通過製作IIS端點來解決問題,我最終調用了可用於匿名用戶的網絡管道,這意味着不需要模擬。

0

如果你得到這個特殊的例外,它通常意味着你的服務沒有運行。我看到你在URL中使用了localhost。我只是想確保主機和服務在同一臺機器上運行。 WCF不允許通過具有此綁定的計算機進行通信。

當我收到此消息時,通常會檢查並看到我忘記啓動該服務,因此沒有端點收聽。請檢查您的服務實際上是否仍在運行,並且在發生異常時未崩潰。如果這不能解決問題,請張貼您的進度,我可以提出更多建議。

7

標準WCF NetNamedPipesBinding在服務啓動時創建一個隨機生成的管道名稱,同時還有一個內核共享內存對象,WCF客戶端通道棧必須參考該內核對象來查找管道名稱。

在您的網站上使用模擬意味着您的WCF服務被調用的安全上下文具有包含NETWORK USERS組成員資格的登錄令牌(模擬令牌)。

當服務偵聽器啓動時,WCF綁定將在命名管道本身和發佈管道名稱的共享內存對象上創建一個訪問控制列表(ACL)。這兩個ACL都拒絕訪問NETWORK USERS組。因此,模擬遠程用戶的網站在甚至可以發現管道名稱之前,將拒絕訪問共享內存對象。即使它以某種方式發現管道名稱,它仍然會被拒絕訪問管道。

因爲現在服務在Web應用程序工作進程的安全上下文中被調用,它的登錄標記不具有NETWORK USERS組的成員資格 - 它是本地登錄,所以一切正常。

更多詳細信息,請致電http://blogs.charteris.com/blogs/chrisdi,如果您有興趣。我展示瞭如何調整ACL,原則上這種方法可以用來授予對遠程用戶的訪問權限,但我不建議這樣做。

+0

那麼,使用模擬的基於ASP.NET的客戶端無法調用Win32服務的方法是否公平? – 2013-04-03 19:47:17