Здравствуйте, NdF, Вы писали:
Посмотрите
здесь, может чем-нибудь поможет.
Вот что пока получается.
Есть свой MembershipProvider. Реализовал только функцию ValidateUser, где тупо возвращаю true.
Запускал с тиспользованием ASP. NET Development сервер. Постоянно получал ошибку
Имя пользователя/пароль, указанные поставщиком Membership MyMemberShipProvider (MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0) в конфигурации, недействительны. Такой поставщик не зарегистрирован в system.web/membership/providers.
Потратил два дня, потом решил кинуть службу на ИИС сервер на виртуальной машине. Там у меня сразу в настройках мой membershipProvider показался и служба запустилась. Радости не было предела. Но при запуске выскаивает табличка авторизации. Ввожу от балды что хочу, но меня система авторизации отфутболивает. У меня два вопроса.
Первый (менее важен). Как запустит свою службу из под ASP.NET Development server со своим MembershipProvider
Второй (очень важен). Видимо при авторизации работае все таки не мой мембершип, а что-то еще. Что может быть и как это исправить. В настройках службы (при помощи ИИС) я в "Проверка подлинности" отключил все проверки кроме "Обычная проверка подлинности". Что надо еще сделать?
ПРикладываю текст конфига и сам проект. Все таки надеюсь на помощь. Понимаю, что достал, но уж слишком долго я вожусь с этой аутентификацией
ссылка на проект
http://files.rsdn.ru/48074/TempService.zip
Вот конфиг.
<?xml version="1.0"?>
<!--
Примечание. В качестве альтернативы редактированию этого файла вручную можно использовать
средство веб-администрирования, чтобы настроить параметры приложения. Используйте
параметр Веб-узел->Конфигурация Asp.Net в программе Visual Studio.
Полный список параметров и комментарии можно найти в файле
machine.config.comments, который обычно расположен в папке
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration>
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
<appSettings/>
<connectionStrings/>
<system.web>
<!--
Установите compilation debug="true", чтобы вставить символы
отладки в откомпилированную страницу. Поскольку это
сказывается на быстродействии, значение TRUE для этого параметра рекомендуется задавать только
на время отладки.
-->
<compilation debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<!--
Раздел <authentication> включает настройки
режима проверки подлинности, используемые
ASP.NET для идентификации входящих пользователей.
-->
<authentication mode="Windows"/>
<membership defaultProvider="MyMemberShipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="MyMemberShipProvider" type="MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0" />
<!--
connectionStringName="GoStoreDB"
applicationName="MyApplication"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Hashed" />
-->
</providers>
</membership>
<!--
Раздел <customErrors> включает настройки действий,
выполняемых при возникновении необрабатываемой ошибки
во время выполнения запроса. В частности,
разработчик может задать HTML-страницы ошибок
для отображения вместо трассировки стека ошибок.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
<!--
Для запуска приложения ASP.NET AJAX в службе Internet
Information Services 7.0 требуется раздел system.webServer. Этот раздел не нужен для предыдущих версий службы IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</handlers>
</system.webServer>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="myBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
<wsHttpBinding>
<binding name="MyWSBinding">
<security mode="Message">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="TempService.Service1Behavior"
name="TempService.Service1">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyWSBinding"
contract="TempService.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="TempService.Service1Behavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="MyMemberShipProvider (MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0)" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Понял какой пароль требовался, это пароль админа ОС. ТОлько на ИИС, все равно осталась ошибка
Имя пользователя/пароль, указанные поставщиком Membership MyMemberShipProvider (MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0) в конфигурации, недействительны. Такой поставщик не зарегистрирован в system.web/membership/providers.
В настройках службы в ИИС мой провайдер виден, ктому же указан как провайдер по умолчанию
Что еще надо?
Блин, получилось. На уровне сообщений UserName, на уровне транспорта Basic и используется SSL.
Осталось решать три проблемы.
1. К службе можно обратиться как по http, так и по https.
Как сделать так, чтобы толко по https?
2. Когда делаю ссылку клиента на службу, то в адресе к endpoint указывается имя сервера, а не его ip-адрес. Хотелось бы, чтобы был именно ip. Пока приходитися править руками после каждого обновления подключения
3.не знаю как сделать привязку узла в конфиге. Т.е. я сделал ее на ИИС-сервере, там добавил https и сертфиикат. Но мне бы это привязку указать в конфиге, чтобы можно было использовать ASP.Net DEvelopment Server.
Кстати в видео-ролике на techdays в 1 части у сотрудницы Майкрософт при наборе адреса службы в строке адреса браузера выскакивала ошибка досутпа,е сли они набирала http. Если же она набирала https, то открывалась страничка службы, где появлялась ссылка на xml текс службы. Эта ссылка была через https. У меня же во всех случаях ссылка через http. Имеет ли это значение и если да, то хотелось бы это исправить
на всякий случай прикладываю проект
http://files.rsdn.ru/48074/TempService.zip