Вот проблема, я хочу обрабатывать пользователей, используя встроенные функции членства, в частности, используя Oracle.Web.Security.OracleMembershipProvider. У меня есть провайдер для работы с файлами .aspx, правильно вставляя новых пользователей в соответствующие таблицы Oracle и обрабатывая логины. Тем не менее, у меня есть веб-сервис рядом с компонентом веб-сайта решения. Я хочу, чтобы только пользователи, которые зарегистрировались через веб-сайт и могли отправить действительное имя пользователя / пароль с веб-запросами, чтобы иметь доступ к данным.
В любом случае, в файле .cs я делаю это:
OracleMembershipProvider provider = new OracleMembershipProvider();
if (!provider.ValidateUser(username, password))
{
return null;
}
При вызове ValidateUser выдается исключение, подробности: «OracleConnection.ConnectionString недопустим».
Мне бы хотелось думать, что тот факт, что строка подключения работает на страницах .aspx, достаточен для подтверждения правильности строки подключения.
Вот как это выглядит в файле .aspx, ключ находится во второй строке MembershipProvider = "MyOracleMembershipProvider"
<asp:Login ID="LoginUser" runat="server" EnableViewState="false"
RenderOuterTable="false" MembershipProvider="MyOracleMembershipProvider">
<LayoutTemplate>
<span class="failureNotification">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</span>
<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="LoginUserValidationGroup"/>
<div class="accountInfo">
<fieldset class="login">
<legend>Account Information</legend>
<p>
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
//blah blah blah, code removed for length.
</fieldset>
<p class="submitButton">
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
</p>
</div>
</LayoutTemplate>
</asp:Login>
Просмотр некоторых подробностей «провайдера» показывает в основном все нулевые значения / значения по умолчанию, указывая на то, что они не были правильно инициализированы. У меня сложилось впечатление, что конструктор должен инициализировать поставщика членства, используя мой поставщик членства по умолчанию, в соответствии с моим файлом web.config, который выглядит следующим образом:
<configuration>
<system.data>
<DbProviderFactories>
<clear />
<add name="xxxOracleDataProvider" invariant="Oracle.DataAccess.Client" description=".Net Framework Data Provider for Oracle"
type="Oracle.DataAccess.Client.OracleClientFactory,
Oracle.DataAccess,
Version=4.112.2.0,
Culture=neutral,
PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="MEMBERSHIP_PROVIDER"
connectionString="
Persist Security Info=True;
user id = xxxxxx;
password = xxxxxx;
data source=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = xxxxxxx)
(PORT = xxxxxxxx)
)
)
(CONNECT_DATA =
(SERVICE_NAME = xxxxx)
(SERVER = DEDICATED)
)
);"
providerName="Oracle.DataAccess"
/>
</connectionStrings>
<system.web>
<customErrors mode="Off"/>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<compilation debug="true"/>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
<membership defaultProvider="MyOracleMembershipProvider" hashAlgorithmType="SHA1">
<providers>
<clear />
<add name="MyOracleMembershipProvider"
type="Oracle.Web.Security.OracleMembershipProvider,
Oracle.Web, Version=4.112.1.2, Culture=neutral,
PublicKeyToken=89b483f429c47342"
connectionStringName="MEMBERSHIP_PROVIDER"
applicationName="xxx_xxxx_xxxxxx"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed"
minRequiredNonalphanumericCharacters="0"
maxInvalidPasswordAttempts="7"
minRequiredPasswordLength="12"
passwordAttemptWindow="8"
/>
</providers>
</membership>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Я пробовал:
Membership.Provider.ValidateUser(username, password)
также. Он всегда возвращает false, а атрибуты Providers не соответствуют атрибутам моего поставщика по умолчанию (когда я устанавливаю точки останова и наблюдаю за объектом).
У кого-нибудь есть идеи, как решить эту проблему? Я чувствую, что все должно быть просто, поскольку поставщик данных работает нормально на страницах .aspx, но я не могу на всю жизнь получить файл .cs для использования того же поставщика или даже увидеть, что поставщик существует.