Как вызвать.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>
Другие вопросы по тегам