簡體   English   中英

在具有impersonate = true的網站中使用WCF的net.pipe

[英]Using WCF's net.pipe in a website with impersonate=true

我正在嘗試在網站中使用WCF命名管道,但由於錯誤而失敗:

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

和InnerException:

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

還有另一個內部異常給出access denied消息。

我的網站正在使用模擬功能,並且環顧互聯網,這似乎很有意義,但是我不知道如何解決。

有人有什么想法嗎?

謝謝馬特

服務啟動時,標准的WCF NetNamedPipesBinding將創建隨機生成的管道名稱,還創建一個內核共享內存對象,WCF客戶端通道堆棧必須參考該內核共享內存對象以找出管道的名稱。

在您的網站上使用模擬意味着從中調用WCF服務的安全上下文具有登錄令牌(模擬令牌),其中包括NETWORK USERS組的成員身份。

服務偵聽器啟動時,WCF綁定將在命名管道本身以及發布管道名稱的共享內存對象上創建訪問控制列表(ACL)。 這兩個ACL均拒絕訪問NETWORK USERS組。 因此,冒充遠程用戶的網站甚至在發現管道名稱之前就無法訪問共享內存對象。 即使以其他方式找到了管道名稱,也仍然無法訪問該管道。

刪除模擬后,一切正常,因為現在正在Web應用程序工作進程的安全上下文中調用該服務,該服務的登錄令牌沒有NETWORK USERS組的成員身份-它是本地登錄。

如果您有興趣,請訪問http://blogs.charteris.com/blogs/chrisdi ,以獲取更多詳細信息。 我展示了如何調整ACL,並且原則上可以使用這種方法向遠程用戶授予訪問權限,但是我不建議這樣做。

如果您遇到此特定異常,則通常意味着您的服務未運行。 我看到您在URL中使用localhost 我只想確保主機和服務在同一台計算機上運行。 WCF不允許使用此綁定在計算機之間進行通信。

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

我通過使IIS終結點解決了該問題,該終結點最終使網絡管道從可用狀態變為匿名用戶,這意味着沒有假冒行為。

暫無
暫無

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

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