WebMatrix.WebData 无法从单独的 ASP.NET 应用程序读取会员信息
WebMatrix.WebData can't read membership information from a separate ASP.NET application
我有一个现有项目,它使用 ASP.Net、System.Web.Security 和 WebMatrix.WebData 作为会员系统。此应用程序是所有用户创建、更新等并存储到数据库的地方。
我还有一个单独的应用程序,它只是一个普通的 Azure 工作者角色,需要从数据库中读取一些成员信息。例如,我需要查看特定用户的角色。我希望下面的示例程序显示不同的角色 - "Administrator"、"Account Manager" 等,以及某些用户的关联那些角色。我检查了数据库,并且关联都正确存储在 'webpages_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>
嗯,这很尴尬。起初,我错过了 App.config:
的配置部分
<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>
此时,我正在调试器中检查数组的内容,发现它们是空的。但是,在我添加该部分之后,我只能阅读控制台,但无法弄清楚为什么我没有做任何更改输出。
Console.WriteLine("All Roles : {0}", Roles.GetAllRoles().ToString());
发现什么问题了吗? 每次更改后,我都会简要查看输出,希望看到输出发生变化,但我查看的是数组引用,而不是它们的实际内容!
我有一个现有项目,它使用 ASP.Net、System.Web.Security 和 WebMatrix.WebData 作为会员系统。此应用程序是所有用户创建、更新等并存储到数据库的地方。
我还有一个单独的应用程序,它只是一个普通的 Azure 工作者角色,需要从数据库中读取一些成员信息。例如,我需要查看特定用户的角色。我希望下面的示例程序显示不同的角色 - "Administrator"、"Account Manager" 等,以及某些用户的关联那些角色。我检查了数据库,并且关联都正确存储在 'webpages_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>
嗯,这很尴尬。起初,我错过了 App.config:
的配置部分<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>
此时,我正在调试器中检查数组的内容,发现它们是空的。但是,在我添加该部分之后,我只能阅读控制台,但无法弄清楚为什么我没有做任何更改输出。
Console.WriteLine("All Roles : {0}", Roles.GetAllRoles().ToString());
发现什么问题了吗? 每次更改后,我都会简要查看输出,希望看到输出发生变化,但我查看的是数组引用,而不是它们的实际内容!