我有一个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应用。
答案 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格式的人在移动应用中使用。