2013-03-19 78 views
2

我在WPF應用程序中爲某些任務使用自託管服務。服務主機在運行時啓動,其基址爲http://localhost:Whatever-port-is-free-at-runtime。當用戶具有管理權限時,這可以正常工作,但應用程序由受限用戶運行時會出現問題。WCF ServiceHost受限用戶netsh/httpcfg

我在網絡上發現了一些建議,建議使用netsh/httpcfg保留網址,該網址適用於管理員用戶,但對於受限用戶不適用,因爲他們可能沒有使用這些工具保留網址的權限。由於直到運行時才知道端口號,因此url保留命令在邏輯上只能在運行時運行,這意味着進程將由受限用戶啓動,而不具有執行命令的權限。我在想這個嗎?

我想知道的是,如果有適當的解決方法?另外,我想知道受限用戶是否可以打開本地託管的WCF服務,因爲如果受限用戶無法做到這一點,解決上述問題將毫無意義。

This question perfectly describes my first issue of URL reservation

+1

此服務是否被任何客戶端使用?如果是,那麼客戶端如何隨着地址的變化動態生成地址而使用該服務。另外爲什麼你沒有WCF服務的固定端口? – Rajesh 2013-03-20 17:02:23

+0

是的,它被其他客戶使用。動態生成的localhost:xxxx url在運行時會讓客戶端知道,所以這不是一個問題,因爲當以admin身份運行時,此設置實際上工作。我不能擁有一個固定端口,因爲我無法確定最終用戶計算機上的硬編碼端口號是否空閒,即使這是我仍然遇到的問題,因爲我仍然需要保留命名空間。 – Bablo 2013-03-20 17:51:44

回答

1

在WCF中,HTTP和HTTPS綁定使用的HTTP.sys的掩護下,以保留所需的URL爲特定的WCF服務,這是相同的路徑IIS本身遵循一邊做綁定的網站它管理。這就解釋了執行HTTP/HTTPS綁定的進程需要在提升模式下運行的原因。

話雖這麼說,我會解決你的問題,兩種不同的方式:

選項1:使用不同種類的結合。例如,NetTcpBindingNetNamedPipesBinding,例如,不要一般需要管理權限:這是迄今爲止最簡單的方法。

選項2:在安裝時設置必需的命名空間預留。這樣您可能會要求您的用戶在提升模式下執行安裝,並稍後允許受限制的帳戶運行它。在執行初始安裝/預留時,您還可以找到可用的端口(也可以將其保存在配置文件中供以後重複使用)。