2014-02-14 40 views
0

我有一個解決方案,其中包括一個網站和WCF Web服務。在網站中,我需要獲取當前登錄的用戶,並在其個人資料中訪問屬性值,該屬性值指定另一個用戶(用於Web服務)的用戶名。然後我需要從Web服務用戶配置文件(而不是登錄的網站用戶!)獲取一個屬性。從不同的應用程序範圍訪問asp.net會員資格值

到目前爲止,我有這樣的:

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"); 
       } 
      } 
     } 

幾乎工程,我可以按名稱的網絡服務用戶的個人資料,但我可以看到{的ProfileCommon}是展示,而不是Web應用程序的性能Web服務,所以我無法看到我需要的價值。

任何意見,我可能如何能夠實現這一目標?

回答

0

OK,我設法通過增加額外的成員資格和配置文件提供商我的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> 

然後在代碼隱藏:

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"); 

希望這可以幫助別人!

相關問題