我最近构建了一个从 \ some_server \ c $ \ directory \ file.xls 解析远程文件的程序,它在我的本地计算机上运行正常,只是一个普通的aspx页面。
然后我将程序放入web部分 我的VM SharePoint服务器上的表单和我 得到此错误:访问路径 '\ some_server \ C $ \目录\ file.xls' 被拒绝。
该文件是与域\经过身份验证的用户共享的,所以我不确定为什么会被拒绝?我的SharePoint是否可能尝试使用本地或网络服务帐户调用它?我怎么能读它?谢谢。
答案 0 :(得分:3)
Salamander是对的,SharePoint不会信任这样做。
将其web.config中的SharePoint的信任级别从WSS_Medium更改为Full是快速解决方案,但存在安全隐患..
答案 1 :(得分:3)
快速说明一下,你可能会遇到经典的NTLM双跳问题。您可以对前端进行身份验证,但由于前端没有您的密码,因此无法对另一台服务器上的资源进行身份验证。
使用提升的权限运行,并根据应用程序池标识设置权限可能是推动前进的一种方式。
答案 2 :(得分:2)
我认为您将需要RunWithElevatedPrivleges,这将使SharePoint使用应用程序池帐户。另请注意,您必须确保应用程序池帐户可以访问该网络共享。避免使用完全信任。
答案 3 :(得分:1)
您能否进一步解释信任级别对您的确切设置是什么?
我认为如果您的应用池标识是域帐户,则可以使用SPSecurity.RunWithElevatedPrivileges来使用应用池凭据来访问该文件。或者,使用impersonate明确传递其他帐户的凭据。
答案 4 :(得分:0)
SharePoint通常在单独的应用程序池中运行。请检查此应用程序池的标识。
答案 5 :(得分:0)
我认为能够访问网络路径,您的代码必须在FULL TRUST中运行,我不认为SharePoint会这样做。
答案 6 :(得分:0)
为什么不将文件存储在SharePoint中以便您可以更好地访问它?将它放在一个隐藏的库中,并使用SPSecurity.RunWithElevatedPrivledges访问它。
RWEP有一些警告。从SPContext(即SPContext.Current.Site)获得的对SPSite和SPWeb的任何引用仍将在登录用户的权限下运行。您必须明确在RWEP委托中创建引用。
SPSecurity.RunWithElevatedPrivileges(委托() { 使用(SPSite site = new SPSite(SPContext.Current.Site.Url)) { 使用(SPWeb web = site.OpenWeb()) { // ...用SPWeb做点什么 } } });
如果您需要从外部sharepoint访问该文件以使用现有进程更新它,您可以使用文件共享路径,该路径可用于所有SPDocumentLibrary,但转到Actions - >使用Windows资源管理器打开以获取网络路径。