启用Ajax的WCF服务无法响应数据

时间:2010-09-22 15:30:46

标签: .net asp.net-ajax wcf

我有一个非常简单的启用Ajax的WCF服务,它应该返回一个序列化为JSON的EntityObject类型的实体。

这是我的.svc文件:

[ServiceContract(Namespace = "FASServices")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class FASService
{
    [OperationContract, WebGet(ResponseFormat=WebMessageFormat.Json)]
    public FrameAttributes GetFrameAttributes(long frameID)
    {
        var data = FrameAttributeAccessor.GetFrameAttributes(frameID);

        WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;

        return data;
    }
}

我已经通过ScriptManager上的服务引用在ASP.Net页面中使用了此服务,并且访问了生成的服务代理。

这是我的web.config:

 <system.serviceModel>
  <behaviors>
   <endpointBehaviors>
    <behavior name="FASAdmin.FASServiceAspNetAjaxBehavior">
     <enableWebScript />
    </behavior>
   </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  <services>
   <service name="FASAdmin.FASService">
    <endpoint address="" behaviorConfiguration="FASAdmin.FASServiceAspNetAjaxBehavior"
     binding="webHttpBinding" contract="FASAdmin.FASService" />
   </service>
  </services>
 </system.serviceModel>

当调用服务时,我可以看到XHR离开我的浏览器(通过FireBug),并且还可以看到ASP.Net开发服务器接收HTTP请求并随后调用服务,该服务使用传递的业务密钥执行简单查找我的数据访问层(我在上面的return语句中有一个断点,并且可以检查返回的实体)。

但是,一旦控制离开我的服务代码并返回,则永远不会向我的浏览器发送响应,然后永远不会收到JSON序列化数据,甚至没有任何响应标头要检查。

有谁知道为什么会这样? 任何人都可以提供任何调试WCF堆栈的技术来跟踪端到端的消息吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

How to trace WCF serialization issues / exceptions,即您必须启用WCF诊断跟踪。