我正在尝试在与Sharepoint相同的站点上设置Asp.net应用程序。因此,http://sharepointurl是sharepoint的网址,要访问应用程序,网址将为http://sharepointurl/MyCustomWebApp/。我已在此级别设置了IIS应用程序,但尝试在bin中使用自定义dll运行应用程序会导致错误
“请求类型'Microsoft.SharePoint.Security.SharePointPermission的权限, Microsoft.SharePoint.Security,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 71e9bce111e9429c'失败。“
我尝试签署该DLL并将其注册到sharepoint服务器GAC,但之后我收到了:
“System.Security.SecurityException:该程序集不允许部分信任的调用者。”
如果我从应用程序bin目录中删除DLL,页面加载但我失去了我需要的功能。
编辑:只有当Dll在bin中时才会发生错误,它不依赖于Dll中的任何一行代码。
IIS版本6
Sharepoint:WSS 3.0
Windows Server 2003
更新:我运行“caspol -machine -addfulltrust(dll的路径)”并且它成功但我仍然收到相同的错误。
答案 0 :(得分:1)
我终于解决了这个问题。我认为它的一部分是通过尝试人们建议的不同事物的组合来解决的,但最终解决的是添加“< trust level =”Full“originUrl =”“/>”进入web.config。对于任何不知道它的人都应该进入system.web部分。我还需要添加几个dll。将dll添加到GAC有帮助但没有解决所有问题。
答案 1 :(得分:0)
在SharePoint中使用IIS网站(在SharePoint中称为Web应用程序)后,您的ASP.NET应用程序不再仅仅是ASP.NET应用程序。它是一个SharePoint应用程序(当然,SharePoint在ASP.NET上运行)。也就是说,除非您在web.config中进行挖掘,以撤消SharePoint为您的特定虚拟目录设置的许多http处理程序。
然而,移动ASP.NET应用程序以在SharePoint中运行没有任何内在错误。将您的程序集/组件放入GAC是一个可能有所帮助的步骤,但看起来对您来说失败了。您的程序集是否可以引用不在GAC中的其他程序集?这可能是你的问题。
如果您的程序集不在GAC中,那么您可以在SharePoint中使用它witihn ASP.NET页面和Web部件(但不能使用工作流程,事件处理程序,自定义字段,功能接收器等)。但是,由于您可能需要设置代码访问安全性(CAS)并不是一个简单的过程,因此会更加痛苦。我不确定SPContext.Current.Web.CurrentUser.LoginName是否需要CAS策略,我倾向于仅将它用于Web部件而不是ASP.NET页面。使用SharePoint快速搜索CAS导致我:http://blog.thekid.me.uk/archive/2007/02/17/code-access-security-cas-and-sharepoint.aspx如果您真的想要深入研究CAS,这看起来是一个好的开始。
答案 2 :(得分:0)
是的,caspol.exe是你幸福的关键。请参阅Configuring Security Policy Using the Code Access Security Policy Tool。
答案 3 :(得分:0)
将排除管理路径添加到SharePoint中,这样它就不会“干扰”您的自定义Web应用程序。
答案 4 :(得分:0)
它涉及.NET安全性。有两种方法可以解决此问题,并且都涉及向SharePoint网站添加“完全信任”。原因是SharePoint和您的应用程序无法访问彼此的资源。
手动方式: 在machine.config或IIS网站文件夹根目录中的web.config文件(通常为“wwwroot”)中添加“完全信任”。这可能是个坏主意,因为它会为您与SharePoint并行运行的每个ASP.NET应用程序提供完全信任。这是一个短期的,严厉的修复,类似于使用管理员访问解决所有代码安全问题。
自动化方式: 针对应用程序DLL运行caspol(代码访问安全策略工具)。这有点棘手,因为它要求你对几个文件夹和DLL做同样的事情。但这是完成你想要做的事情最安全的方式。