从不同的应用程序范围访问asp.net成员资格值

时间:2014-02-14 16:54:30

标签: c# wcf asp.net-membership

我有一个包含网站和WCF网络服务的解决方案。在网站中,我需要获取当前登录用户并访问其配置文件中的属性值,该属性值指定另一个用户的用户名(用于Web服务)。然后,我需要从Web服务用户配置文件(而不是登录的网站用户)获取属性。

到目前为止,我有这个:

if (HttpContext.Current != null)
        {
            if (!string.IsNullOrEmpty(HttpContext.Current.Profile.UserName))
            {
                serviceUsername = HttpContext.Current.Profile.GetPropertyValue("WSUserName").ToString();

                if (!string.IsNullOrEmpty(serviceUsername))
                {
                      ProfileBase profile = ProfileBase.Create(serviceUsername);
                      var siteId = profile.GetPropertyValue("SiteID");
                }
            }
        }

哪个几乎有效,我可以按名称获取Web服务用户配置文件,但我可以看到{ProfileCommon}显示Web应用程序的属性而不是Web服务,因此我无法看到我需要的值。 / p>

关于我如何能够实现这一目标的任何建议?

1 个答案:

答案 0 :(得分:0)

好的,我设法通过向我的web.config添加其他成员资格和配置文件提供程序来实现此功能,包括具有其他提供程序属性的其他Web服务属性:

     <membership>
            <providers>
            <!--(website provider here)-->
            <!--additional web service provider-->
                    <add name="WebServiceMembershipProvider"
                                type="System.Web.Security.SqlMembershipProvider"
                                connectionStringName="ApplicationServices"
                                enablePasswordRetrieval="false"
                                enablePasswordReset="true"
                                requiresQuestionAndAnswer="false"
                                requiresUniqueEmail="true"
                                maxInvalidPasswordAttempts="5"
                                minRequiredPasswordLength="6"
                                minRequiredNonalphanumericCharacters="0"
                                passwordAttemptWindow="10"
                                applicationName="MyWebService" />
            </providers>
 </membership>
 <profile>
            <providers>
                    <add name="WebServiceMembershipProvider"
                             type="System.Web.Profile.SqlProfileProvider"
                             connectionStringName="ApplicationServices"
                             applicationName="MyWebService"/>
            </providers>
             <properties>
             <!--  example website property -->
                <add name="website_property1"
                     type="string"/>
             <!--  example web service property with additional provider attribute-->
                <add name="webservice_property1"
                     type="string"
                     provider ="WebServiceMembershipProvider"/>
            </properties>
</profile>          
 <roleManager enabled="true">
            <providers>
            <!-- (website provider here) -->
            <!-- web service provider-->
             <add connectionStringName="ApplicationServices"
                     applicationName="MyWebService"
                     name="WSAspNetSqlRoleProvider"
                     type="System.Web.Security.SqlRoleProvider" />
            </providers>
</roleManager>

然后在codebehind:

Membership.ApplicationName = "MyWebService";
MembershipUser user = Membership.Providers["WebServiceMembershipProvider"].GetUser(serviceUsername, false);
profile = ProfileBase.Create(serviceUsername);
profile.Initialize(user.UserName, true);
var myProperty = profile.GetPropertyValue("webservice_property1");

希望这有助于其他人!