2014-01-24 20 views
8

我有一個IIS託管的WCF服務,我試圖使用Directory.Exists()方法。如果傳遞不存在的網絡位置,則此方法掛起。我已經搜索了它,發現它由於Directory.Exists()內部實現而「沒問題」。但我寫了一個簡單的控制檯應用程序,它不會掛起,總是返回'false'。我在我的(管理員)帳戶下運行該應用程序,IIS池在「網絡服務」下運行。
你有什麼想法爲什麼?在服務或控制檯應用程序中做同樣的事情有什麼區別?Directory.Exists()奇怪的行爲

+0

你如何檢測掛起?您的IIS運行在哪個TrustLevel中? – TGlatzer

+0

@ Grumbler85我可以看到使用調試器和日誌記錄(實際在方法調用點停止)。我在IIS 7.5上運行服務,但沒有更改信任級別設置。 –

+0

您可以嘗試在本地系統中暫時在IIS中爲您運行應用程序池服務 - 如果它在本地系統下正常工作,您會知道它是與權限相關的。 –

回答

1

這裏的關鍵是真正關於網絡服務與管理帳戶的對比。

你知道後者可以接受網絡位置,但是你不確定前面是否可以。

在這裏你可以期望有訪問的情況下的一個例子,但它並沒有真正的工作:https://serverfault.com/a/177150

事實上,與共享驅動器的機器是不是一個域是你的主要問題在哪裏

2

這可能是由於Windows中存在的用戶授權控制東西引起的(請記住,當您嘗試訪問您在Windows中無法訪問的文件夾時,它會等待很長時間以回答「您無法訪問......「或類似的東西)。

你正在運行應用程序的用戶是哪個? 您的用戶ID(根據您所說的可以訪問運行控制檯應用程序的文件夾)能夠看到該文件夾​​。

因此,嘗試運行該應用程序作爲您自己的用戶ID。

此外,檢查此鏈接:https://stackoverflow.com/a/21385162/1378854

1

確定應用程序作爲網絡服務運行?本地網絡服務帳戶將無法訪問網絡。