Fiddler对WCF的请求失败,504 ReadResponse()失败:服务器未返回此请求的响应

时间:2011-07-19 18:22:36

标签: wcf json .net-4.0 fiddler

相关服务代码:

[WebGet(BodyStyle = WebMessageBodyStyle.WrappedResponse, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate="products")]
public Product[] GetAllProduct()
{
    return ProductProvider.Instance.GetAllProducts();
}

[OperationContract]
Product[] GetAllProduct();

相关配置代码:

<?xml version="1.0"?>
<configuration>
<connectionStrings>
    <add name="TestEntities" connectionString="metadata=res://*/ProductEntityDataModel.csdl|res://*/ProductEntityDataModel.ssdl|res://*/ProductEntityDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=PC\MSSQL2008;initial catalog=Test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>
<system.serviceModel>
    <services>
        <service name="Service.Default">
            <endpoint address="http://localhost:1651/Default.svc" binding="webHttpBinding" contract="Service.IDefault"/>
        </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior>
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
</system.serviceModel>
<system.web>
    <compilation debug="true"/>
</system.web>
</configuration>

相关的小提琴请求

Fiddler Request

6 个答案:

答案 0 :(得分:2)

过去我遇到过URITemplate的问题。你能尝试一下:

[WebGet(BodyStyle=WebMessageBodyStyle.WrappedResponse, ResponseFormat=WebMessageFormat.Json)]
public Product[] products()
{
    return ProductProvider.Instance.GetAllProducts();
}

[OperationContract]
Product[] products();

答案 1 :(得分:0)

这可能是因为您的类中的DateTime类型属性默认为DateTime.MinValue(0001-01-01)。

我有完全相同的问题,并通过将日期设置为更大的值来解决它。

此外,您应该注意任何无法直接序列化为JSON的属性,例如TimeSpan,DateTimeOffset等。

答案 2 :(得分:0)

我们有同样的问题。我在这里找到了相关的答案:

WCF DataContractSerializer has a limit of 65536 object in the object graph

希望它会有所帮助。

答案 3 :(得分:0)

我与Fiddler(v2.3.9.3)有类似的问题,使用BasicHttpBinding的服务;我能够通过将绑定上的transferMode更改为Streamed(默认为Buffered)来修复它,然后将Fiddler置于流模式(确保“流”按钮上工具栏处于选中/按下状态。)

#Chris

答案 4 :(得分:0)

我刚碰到这个,问题是user72213发布的链接中提到的对象图限制。

使用ServiceBehaviorAttribute.MaxItemsInObjectGraph属性修改此限制对我来说非常有用。

您还可以尝试<dataContractSerializer>maxItemsInObjectGraph属性,但在我的情况下使用该属性会更方便。

答案 5 :(得分:0)

当返回的dateTime对象为null时,我遇到了这个问题。它在调试时运行良好,并在脱盐时出现问题。 一种方法是使你的dateTime null能够DateTime?并且它将被正确地反序列化。

希望对某人有帮助。