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