现有连接被远程主机强制closures – WCF
我有一个WCF Web服务工作正常。 然而,有一个特定的呼叫失败 – 但只对某些用户失败。 调用非常简单 – 这是一个调用来获取Person对象的列表。
对于用户A,它工作正常。 该服务查询数据库,创buildPerson对象列表并将其返回给调用应用程序。
用户B失败。 奇怪的是,当我debugging服务似乎工作正常。 它能够查询数据库,并创buildList对象并将其返回。 服务本身永远不会失败。 但客户端应用程序收到“现有连接被远程主机强行closures”错误。
对我来说,当服务层试图以XML格式打包数据并发送callback用应用程序时,似乎发生了一些事情。 我认为它必须是一个数据相关的问题,因为这个调用对其他用户来说工作正常。 我已经可视化地看了一下这些数据,而且我没有看到任何奇怪的东西。 一个猜测是,用户B的数据有一些时髦的隐藏字符或什么,因此导致服务意外closures。 就是这样
有任何想法吗?
我发现的诊断这种事情的最好的东西是服务跟踪查看器。 设置起来相当简单(假设你可以编辑configuration):
http://msdn.microsoft.com/en-us/library/ms732023.aspx
希望这可以帮助。
我有这个问题,因为我的网站没有绑定到SSL端口的证书。 我想我会提到它,因为我没有在googleweb的任何地方find这个答案,花了我几个小时才弄明白。 事件查看器中没有任何内容显示出来,这对于诊断它是非常棒的。 希望这节省了别人的痛苦。
我曾经见过这个。 用户是否请求不同数量的数据? 我发现,即使您可以configuration数据有效负载的绑定(即maxReceivedMessageSize
), httpRuntime
maxRequestLength
也会胜过WCF设置,因此如果IIS尝试提供超出该请求的请求,则会显示此行为。
像这样想:
如果您的WCF行为中maxReceivedMessageSize
为12MB,并且maxRequestLength
为4MB(默认值),则IIS将获胜。
我发现如果返回的对象只有在构造函数中初始化的自动属性(使用C#6.0语法),则可以得到此错误。
我相信这是由于WCF使用无参数构造函数反序列化客户端上的对象,然后设置对象上的属性。 它需要有一个可用的 (它可以是私人的)填充对象,否则将失败。
我现在只是在服务器上有这个错误,解决的办法是在wcf web.config中的<behavior>
标签下设置maxItemsInObjectGraph
属性:
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
我有同样的问题。 我的解决办法是:
如果您在项目中使用LinQ2SQL,请在Visual Studio中打开您的dbml文件,然后将序列化模式更改为“单向”
我遇到了同样的exception,发现一个InnerException: SocketException.
在svclog跟踪。
在查看Windows事件日志后,我看到一个来自System.ServiceModel.Activation.TcpWorkerProcess
类的错误。
您是否使用netTcpBinding和端口共享在IIS中托pipe您的wcf服务?
IIS端口共享function似乎有一个错误,检查修复 :
我的解决scheme是在Windows服务中托pipe您的WCF服务。
把我的头发拉出6小时这个完全无用的错误后,我的问题最终是因为我的data transfer objects
太复杂。 开始与超级简单的属性,如public long Id { get; set;}
public long Id { get; set;}
这就是…没有什么幻想。
我的问题也是序列化。 原因是我的一些DTO /业务类和属性被重命名或删除,而不更新服务引用。 我很惊讶,我没有得到一个contract filter mismatch error
而是。 但更新服务参考修复了我的错误(相同的错误作为OP)。
在我的情况下,它也是与序列化。 我需要为可能出现在序列化中的所有类添加[KnownType(typeof(...)]
。