这个异常一直抛在SOAP请求上,接收时间差不多是三分钟,大小为2.25兆。
在搜索网页时,我发现各种帖子似乎都是关于在Request上设置标题,有些人希望我不发送“Expect:”标题,有些人希望我发送“Keep-Alive:”标题,但不管我发送的标题我仍然得到这个讨厌的错误。我不相信设置任何标题是我的答案,因为我可以使用“curl”重新创建完全相同的请求,并且响应最终会回来时没有任何问题。
我的<httpRuntime maxRequestLength="409600" executionTimeout="900"/>
。
我觉得我的选择已经用完了。如果有人能提供任何帮助,我将非常感激。还有一些需要注意的事情是,我正在请求数据的服务器不在我的手中,这些请求也是通过https进行的,而其他响应较小的请求也能完美无缺地工作。
由于
答案 0 :(得分:11)
您将帖子标记为.NET35,那么您使用的是WCF吗?
如果是这样,下面是我们用于大型数据集的App.config示例:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:1602/EndPoint.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding" contract="IEndPointContract" name="EndPoint" behaviorConfiguration="EndpointBehaviour" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="EndpointBehaviour">
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
答案 1 :(得分:6)
我希望回答这个问题还为时不晚。
尝试在合约界面的定义中添加以下属性:
[ServiceKnownType(typeof(ReturnClass))]
对于允许返回多态类的更通用的解决方案,请参阅这篇文章: http://www.goeleven.com/blog/entryDetail.aspx?entry=45
答案 2 :(得分:4)
如果您使用dbml而不是edmx,您将得到这个(底层连接已关闭:连接意外关闭。)因为dbml不会返回它需要datacontract的可序列化数据所以转到dbml文件的属性并更改序列化模式为单向。
答案 3 :(得分:3)
您是否尝试过this Blog Post的建议?问题很可能在于.NET的TCP / HTTP堆栈实现。
答案 4 :(得分:3)
我遇到了同样的问题,经过深入调查后我发现了这篇文章:
这一切都与为客户端和服务器设置“dataContractSerializer”有关。 希望这会有所帮助。
答案 5 :(得分:3)
我收到此错误是因为我的datatransfereobjects以递归方式相互引用。
例如:
客户 - &GT; (有) - &gt;评分 Rating-&GT; (属于) - &gt;客户
所以你必须删除周期。
[DataContract]
public class Rating
{
private Customer _customer;
//[DataMember] // <- EITHER HERE
public Customer Customer
{
get { return _customer; }
set { _customer = value; }
}
}
[DataContract]
public class Customer
{
private long _customerID;
[DataMember]
public long CustomerID
{
get { return _customerID; }
set { _customerID = value; }
}
[DataMember] // <- OR HERE
public Rating Rating
{
get { return _rating; }
set { _rating = value; }
}
}
答案 6 :(得分:3)
尝试了几种方法来消除此错误消息,直到找到此解决方案: http://kiranpatils.wordpress.com/2008/09/22/the-underlying-connection-was-closed-the-connection-was-closed-unexpectedly-while-returning-data-table-from-wcf-service/
您可以更改列表&lt;&gt;到DataSet。我怀疑DataSet可以处理比List&lt;&gt;。
更多的数据希望它有所帮助。
答案 7 :(得分:2)
我添加了另一个字段,但没有在该属性上设置。 这是我对同样错误的解决方案。
[DataMember]
public bool HasValue
{
get { return true; }
set { }//adding this line made the solution.
}
答案 8 :(得分:1)
如果出现内部错误,则会引发一般错误。
尝试在此处添加跟踪:http://msdn.microsoft.com/en-us/library/ms732023(v=vs.110).aspx
然后你会看到完整的日志。
答案 9 :(得分:0)
对于使用EF的WCF,只需在上下文类中添加以下代码。
base.Configuration.ProxyCreationEnabled = false;