我有一個IIS託管的WCF服務,我試圖使用Directory.Exists()
方法。如果傳遞不存在的網絡位置,則此方法掛起。我已經搜索了它,發現它由於Directory.Exists()
內部實現而「沒問題」。但我寫了一個簡單的控制檯應用程序,它不會掛起,總是返回'false
'。我在我的(管理員)帳戶下運行該應用程序,IIS池在「網絡服務」下運行。
你有什麼想法爲什麼?在服務或控制檯應用程序中做同樣的事情有什麼區別?Directory.Exists()奇怪的行爲
8
A
回答
1
這裏的關鍵是真正關於網絡服務與管理帳戶的對比。
你知道後者可以接受網絡位置,但是你不確定前面是否可以。
在這裏你可以期望有訪問的情況下的一個例子,但它並沒有真正的工作:https://serverfault.com/a/177150
事實上,與共享驅動器的機器是不是一個域是你的主要問題在哪裏
2
這可能是由於Windows中存在的用戶授權控制東西引起的(請記住,當您嘗試訪問您在Windows中無法訪問的文件夾時,它會等待很長時間以回答「您無法訪問......「或類似的東西)。
你正在運行應用程序的用戶是哪個? 您的用戶ID(根據您所說的可以訪問運行控制檯應用程序的文件夾)能夠看到該文件夾。
因此,嘗試運行該應用程序作爲您自己的用戶ID。
1
確定應用程序作爲網絡服務運行?本地網絡服務帳戶將無法訪問網絡。
1
使用UNC路徑而不是映射的網絡驅動器,因爲映射驅動器特定於您的用戶帳戶。另外,正如KMan指出的那樣,確保應用程序池標識可以訪問UNC路徑目標。
請訪問以下鏈接:
http://msdn.microsoft.com/en-us/library/ff649309.aspx How to get working path of a wcf application?
感謝。
相關問題
你如何檢測掛起?您的IIS運行在哪個TrustLevel中? – TGlatzer
@ Grumbler85我可以看到使用調試器和日誌記錄(實際在方法調用點停止)。我在IIS 7.5上運行服務,但沒有更改信任級別設置。 –
您可以嘗試在本地系統中暫時在IIS中爲您運行應用程序池服務 - 如果它在本地系統下正常工作,您會知道它是與權限相關的。 –