Directory.Exists()奇怪的行为

时间:2014-01-24 06:20:19

标签: c# .net wcf iis

我有一个IIS托管的WCF服务,我正在尝试使用Directory.Exists()方法。如果传递不存在的网络位置,则此方法将挂起。我用谷歌搜索了它,发现由于Directory.Exists()内部实现,它“有点好”。但是我写了一个简单的控制台应用程序,它做同样的事情,而Directory.Exists()永远不会挂起,总是返回'false'。我在我的(管理员)帐户下运行应用程序,IIS池在“网络服务”下运行 你有什么想法吗?在服务或控制台应用程序中执行相同操作有什么区别?

4 个答案:

答案 0 :(得分:2)

这可能是由于Windows中存在的用户授权控制内容造成的(请记住,当您尝试访问Windows中没有访问权限的文件夹时?它会等待很长时间才能回答“您无法访问” ,......“或类似的东西。”

您运行该应用程序的用户是哪个? 您的用户ID(根据您所说的可以访问运行控制台应用程序的文件夹)可以看到该文件夹​​。

因此,尝试将应用程序作为您自己的用户ID运行。

此外,请检查以下链接:https://stackoverflow.com/a/21385162/1378854

答案 1 :(得分:1)

您确定该应用程序是作为网络服务运行的吗?本地网络服务帐户将无法访问网络。

答案 2 :(得分:1)

使用UNC路径而不是映射的网络驱动器,因为映射的驱动器特定于您的用户帐户。此外,正如KMan指出的那样,确保应用程序池标识可以访问UNC路径目标。

请访问此链接:

http://msdn.microsoft.com/en-us/library/ff649309.aspx How to get working path of a wcf application?

感谢。

答案 3 :(得分:1)

这里的关键是关于在网络服务和管理员帐户上运行。

你知道后者可以加入网络位置,但你不确定是否可以使用。

以下是您可能期望有访问权限的情况的一个示例,但它确实不起作用:https://serverfault.com/a/177150

  

具有共享驱动器的计算机不在域上的事实是您的主要问题是