如何在没有ASP.NET的情况下从json客户端调用.NET AuthenticationService

时间:2012-01-18 22:17:23

标签: wcf json forms-authentication

我有一个WCF 4服务,它位于Secure子文件夹中,在使用.NET AuthenticationService使用Forms身份验证对客户端进行身份验证后可以访问。

此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 个答案:

答案 0 :(得分:0)

是的,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>

答案 1 :(得分:0)

这个问题已经存在了很长时间,但我认为如果我发布答案,它会对某人有所帮助。

您肯定可以为AuthenticationService返回json。 解决方案非常简单,就像Garret一样,您只需要配置另一个端点,但需要为端点行为添加2个附加属性:defaultOutgoingResponseFormat =&#34; Json&#34;和defaultBodyStyle =&#34; Wrapped&#34;覆盖默认的soap响应。

<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格式的人在移动应用中使用。