2017-01-12 3 views
3

구성원 시스템에 ASP.Net, System.Web.Security 및 WebMatrix.WebData를 사용하는 기존 프로젝트가 있습니다. 이 응용 프로그램은 모든 사용자를 만들고 업데이트하고 데이터베이스에 저장하는 곳입니다.WebMatrix.WebData는 별도의 ASP.NET 응용 프로그램에서 구성원 정보를 읽을 수 없습니다.

나는 데이터베이스에서 다시 멤버십 정보의 일부를 읽을 필요가있는 단순한 Azure 작업자 역할 인 별도의 응용 프로그램도 가지고 있습니다. 예를 들어 특정 사용자가 어떤 역할을 수행해야하는지 알 필요가 있습니다. 아래 예제 프로그램은 "관리자", "계정 관리자"등 다른 역할을 보여줄 것으로 예상되며 특정 사용자는 해당 역할과 연관 될 것입니다. 데이터베이스에 체크인 했으므로 연관은 모두 '웹 페이지_Membership' 테이블 등 정확하게 저장됩니다.

이제 두 번째 응용 프로그램은 첫 번째 응용 프로그램에서 만든 역할을 볼 수 없습니다. 필자는 첫 번째 프로젝트에서 두 번째 프로젝트로 관련 구성 설정을 복사하려고 시도했습니다. 나는 WebMatrix.WebData 패키지가 더 이상 사용되지 않는다는 것을 깨닫고 Microsoft.AspNet.WebPages.WebData에 포함되어 있습니다. 두 프로젝트간에 모든 것을 정확히 동일하게 유지하려고 노력했습니다.

public static void Main() 
{ 
    if (!WebSecurity.Initialized) 
    { 
     Console.WriteLine("Initializing WebSecurity"); 
     WebSecurity.InitializeDatabaseConnection("CustomDbContext", "UserProfile", "Id", "Username", autoCreateTables: false); 
    } 

    using (var db = new CustomDbContext()) 
    { 
     Console.WriteLine("All Roles : {0}", Roles.GetAllRoles().ToString()); 

     foreach (var user in db.UserProfiles) 
     { 
      Console.WriteLine("User  : {0}", user.UserName); 
      Console.WriteLine(" Roles : {0}", Roles.GetRolesForUser(user.UserName).ToString()); 
     } 
    } 

    Console.Read(); 
} 

Packages.config :

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="EntityFramework" version="6.1.3" targetFramework="net461" /> 
    <package id="Microsoft.AspNet.WebPages.Data" version="2.0.20710.0" targetFramework="net461" /> 
    <package id="Microsoft.AspNet.WebPages.WebData" version="2.0.20710.0" targetFramework="net461" /> 
    <package id="CustomDataModels" version="1.0.0" targetFramework="net461" /> 
    <package id="WebMatrix.WebData" version="2.0.30506.0" targetFramework="net461" /> 
</packages> 

의 App.config :

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> 
    </startup> 
    <connectionStrings> 
    <add name="CustomDbContext" connectionString="XXX" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    <machineKey validationKey="XXX" decryptionKey="XXX" validation="SHA1" decryption="AES" /> 
    <roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
     <providers> 
     <clear /> 
     <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" /> 
     </providers> 
    </roleManager> 
    <membership defaultProvider="SimpleMembershipProvider"> 
     <providers> 
     <clear /> 
     <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> 
     </providers> 
    </membership> 
    </system.web> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 
</configuration> 

답변

1

음이 창피하다. 내가 디버거에서 배열의 내용을 검사하고,이 시점에서

<system.web> 
    <roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
    <providers> 
     <clear /> 
     <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" /> 
    </providers> 
    </roleManager> 
    <membership defaultProvider="SimpleMembershipProvider"> 
    <providers> 
     <clear /> 
     <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> 
    </providers> 
    </membership> 
</system.web> 

, 빈을보고 : 처음 엔의 App.config에서 구성 섹션을 누락되었습니다. 그러나, 내가 그 섹션을 추가 한 후에, 나는 콘솔을 읽는 것에 의지했고, 내가 출력을 변경 한 이유가 무엇인지 알 수 없었다.

Console.WriteLine("All Roles : {0}", Roles.GetAllRoles().ToString()); 

스팟 문제가 있습니까? 출력 변경이있을 것으로 예상하면서 모든 변경 사항을 간략히 살펴 보았습니다. 그러나 실제 내용 대신 배열 참조를보고있었습니다.