Как вызвать.NET AuthenticationService из json-клиента без ASP.NET
У меня есть служба WCF 4, которая находится в подпапке Secure и доступна после аутентификации клиента с использованием проверки подлинности с помощью форм с помощью.NET AuthenticationService.
Эта служба WCF предназначена для клиента мобильного приложения, который взаимодействует через json, но не является приложением ASP.NET. Я успешно настроил службу для использования json, и служба AuthenticationService имеет стандартную конфигурацию, описанную во многих местах, например, http://msdn.microsoft.com/en-us/library/bb398990.aspx
Документация для AuthenticationService гласит: "Приложение должно иметь возможность отправлять и использовать сообщение SOAP". Однако я хочу, чтобы клиент мог использовать json для аутентификации. Это возможно? Какая конфигурация требуется?
Я нашел эту статью http://weblogs.asp.net/asptest/archive/2008/12/09/working-with-the-asp-net-ajax-authentication-service.aspx поэтому похоже, что AuthenticationService может обрабатывать json но он использует службы клиентских приложений. Клиент мобильного приложения не является приложением ASP.NET.
2 ответа
Вопрос давно устарел, но я думаю, что кому-то поможет, если я отправлю свой ответ.
Наверняка вы можете вернуть json для AuthenticationService. Решение очень простое, как в ответе Гаррета, вам нужно только настроить другую конечную точку, подобную этой, но вам нужно добавить 2 дополнительных атрибута для поведения конечной точки: defaultOutgoingResponseFormat="Json" и defaultBodyStyle="Wrapped", чтобы перезаписать ответ мыла по умолчанию.
<system.serviceModel>
<services>
<service behaviorConfiguration="AuthenticationServiceBehaviors" name="System.Web.ApplicationServices.AuthenticationService">
<endpoint address="" behaviorConfiguration="ajaxBehavior"
contract="System.Web.ApplicationServices.AuthenticationService"
binding="webHttpBinding" bindingConfiguration="RestBinding"
bindingNamespace="http://asp.net/ApplicationServices/v200"/>
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="RestBinding" />
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ajaxBehavior">
<webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="AuthenticationServiceBehaviors">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
Я надеюсь, что это поможет кому-то, кто хочет представить членство asp.net в формате json для использования в мобильном приложении.
Да, AuthenticationService может обрабатывать JSON. Есть несколько способов сделать это. Вот пример конфигурации, которую я использовал в прошлом, используя элемент.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service name="System.Web.ApplicationServices.AuthenticationService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="" behaviorConfiguration="ajaxBehavior"
contract="System.Web.ApplicationServices.AuthenticationService"
binding="webHttpBinding" bindingConfiguration="webHttpBindingSecure"
bindingNamespace="http://asp.net/ApplicationServices/v200"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="ajaxBehavior">
<enableWebScript/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="webHttpBindingSecure">
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>