【问题标题】:Custom RoleProvider not working when deployed to web app's bin directory部署到 Web 应用程序的 bin 目录时自定义 RoleProvider 不起作用
【发布时间】:2011-04-05 12:42:41
【问题描述】:

我为 SharePoint Web 应用程序创建了自定义成员资格和角色提供程序。

如果我将这些类的 DLL 部署到 GAC 中,则成员资格/角色规定就可以正常工作。如果我将这些 DLL 部署到 IIS 中 Web 应用程序的 bin 文件夹,当浏览到该站点时,Web 应用程序会立即退出并出现服务器错误。

解析器错误消息:调用目标抛出异常。

如果我在错误页面上查看源代码,我会得到更多信息:

[ConfigurationErrorsException]:调用的目标已抛出异常。 (C:\inetpub\wwwroot\wss\VirtualDirectories\theportal.com80\web.config 第 119 行) 在 System.Web.Security.Roles.Initialize() 在 System.Web.Security.RoleManagerModule.OnLeave(对象源,EventArgs eventArgs) 在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

它所指的行是:

<add name="PortalRoleProvider" applicationName="/" 
     type="Portal.Security.PortalRoleProvider, 
           Portal.Security, Version=1.1.0.0, 
           Culture=neutral,PublicKeyToken=5be544eaa65820dd" 
/>

这一定是权限问题,因为正如我所说,如果部署到 GAC 不会出现错误——此外,如果我将网络应用程序的 web.config 设置为完全信任。

<trust level="full" />

我已经添加了 CAS 策略(嗯,WSPBuilder 已经为我自动添加了它们。)但它们似乎没有工作。对于包含角色提供者的 DLL,它们如下所示:

<PermissionSet class="NamedPermissionSet" version="1" Description="WSPBuilder generated permissionSet" Name="portal.shareddllsinstaller.wsp-3a7ba544-2178-4505-a9d9-28622c565d07-1">
    <IPermission class="AspNetHostingPermission" version="1" Level="Medium" />
    <IPermission class="SecurityPermission" version="1" Flags="Assertion, Execution, ControlThread, ControlPrincipal, RemotingConfiguration" />
    <IPermission class="SharePointPermission" version="1" ObjectModel="True" />
    <IPermission class="EnvironmentPermission" version="1" Read="TEMP;TMP;USERNAME;OS;COMPUTERNAME" />
    <IPermission class="PrintingPermission" version="1" Level="DefaultPrinting" />
    <IPermission class="WebPartPermission" version="1" Connections="True" />
    <IPermission class="FileIOPermission" version="1" Read="$AppDir$" Write="$AppDir$" Append="$AppDir$" PathDiscovery="$AppDir$" />
    <IPermission class="WebPermission" version="1">
        <ConnectAccess>
            <URI uri="$OriginHost$" />
        </ConnectAccess>
    </IPermission>
    <IPermission class="IsolatedStorageFilePermission" version="1" Allowed="AssemblyIsolationByUser" UserQuota="9223372036854775807" />
    <IPermission class="DnsPermission" version="1" Unrestricted="true" />
    <IPermission class="SmtpPermission" version="1" Access="Connect" />
    <IPermission class="SqlClientPermission" version="1" Unrestricted="true" />
</PermissionSet>

任何想法如何让这些自定义角色/成员资格提供程序在 bin 目录中工作?什么可能导致他们失败?

【问题讨论】:

    标签: c# asp.net authentication membership-provider roleprovider


    【解决方案1】:

    这可能是一个疯狂的猜测,但也许:您的应用程序根目录低了几级?即

    http://foo.com/MyApp
    http://foo.com/bar/MyApp
    

    而不是

    http://foo.com/
    

    ?如果是这样,您需要确保 IIS 知道将 /MyApp / /bar/MyApp 视为应用程序根目录,方法是在 IIS 中单击“创建应用程序”(它会得到一个沼泽图标)。

    本质上,~/bin 是相对于应用程序根目录的,默认情况下是站点根目录。因此,即使您的代码位于 /bar/MyApp,它也在寻找 /bin/some.dll 中的 dll。通过正确标记应用程序根目录,它将查找/bar/MyApp/bin/some.dll

    【讨论】:

    • 谢谢,是的,应用程序根目录是站点根目录(据我所知,无论如何——完全有可能 SP 在幕后做一些我不知道的恶作剧......)如果我在 web.config 中将信任设置为 Full 就可以工作,所以我猜它至少可以找到 DLL?
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2014-09-22
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多