WCF +“底层连接已关闭:连接意外关闭。”

时间:2012-11-27 15:57:30

标签: xml wcf escaping wcf-client connection-close

这是一场噩梦般的学习,并获得了一个有效的WCF来传输“网络爬行”数据。

首先是GoDaddy的服务器创建了一个不可跟踪的错误,在第一次连接/调用之后每隔15秒关闭我的WCF连接,无论我是否在每次调用后关闭了连接。在我最终联系GoDaddy寻求解决方案后,我可能会用尽所有可能的解决方案几周后解决了这个问题。服务器迁移后,此问题消失了。

经过几周的时间拔出我的头发超过15秒的连接丢失,我遇到了另一个不可追踪的错误... “基础连接已关闭:连接意外关闭。”< / strong>即可。此时,我放弃了WCF并回到了ASMX服务部门。

错误:“底层连接已关闭:连接意外关闭。”非常通用,解决方案各不相同,因此难以诊断/修复。跟踪日志不显示插孔,由于某种原因,我的本地计算机上不会发生同样的错误,仅在服务器上。当我收到此错误时,服务器跟踪日志甚至不会显示客户端调用。就像调用从来没有从客户端进入WCF服务....最重要的是,除了“System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object)”之外,客户端的跟踪日志没有显示任何内容。强>错误,没有帮助。

我已尝试过所有可能的在线解决方案或可能的方法来提供更有意义的跟踪,但没有运气。其他任何人遇到这个,没有帮助的跟踪日志?

1 个答案:

答案 0 :(得分:2)

<强> TL; DR: 如果你在WCF中遇到这个错误,我想要遇到的主要问题是当它出错时,在Intelli-Sense类型的调试窗口中尝试放大镜图标/查看为XML。这个错误可能会像我一样暴露出来。


起初我以为是Class Array的序列化在它到达线之前搞砸了。该数组返回大量对象,有些是嵌套的,因此很有可能。我使用Xml.Serializer测试了这个理论到Serialize and Deserialize the returned Class Array into a XML document。这很好,客户端没有错误。规则序列化。

然后我想,也许我没有正确设置web.Config文件中的一个设置。不,一切都是正确的绑定,行为,限制,超时...所有看起来都很好。所以我想,也许因为我正在进行多次调用,这是一个并发或线程问题。为了测试这个,我每个请求只返回1组结果,而不是序列化类对象的数组。我又遇到了错误!所以这不是并发或线程问题。

但是,返回单个类对象导致了解决方案。我注意到一个对象每次都失败了...但是这个类对象是几个字符串,整数和列表(另一个类)的容器。返回的主类中通常不超过1000个子对象。但很明显,在这个对象中返回的内容存在问题。经历所有可能性(通常在500-1000之间)而不知道要寻找什么是一种大海捞针问题。

幸运的是,当弹出错误时,给我“基础连接已关闭:连接意外关闭。”我将鼠标悬停在发送到WCF的List(Of Class)上仍然显示错误时提供服务。这提出了一种智能类型的调试窗口,允许您在列表(类)中筛选每个类,同时挖掘类中的每个子对象。因为我只在我的List(类)中返回了1个类,以帮助缩小范围,并假设它不是引起问题的Integer字段 - 我直接返回了String变量。复制&amp;将它们粘贴到记事本中,并没有真正看到任何错误,我注意到了蝙蝠,尽管一些子对象引起了怀疑。然后出于好奇,我注意到一个小放大镜,在这个智能型调试窗口内的每个返回字符串旁边都有一个下拉箭头。我点击放大镜看到我的每一个怀疑,并注意到以XML格式查看字符串的选项。我点击了这个并且长期看,我在其中一个有意义的字符串上出错了!错误指出了一个未逃脱的&amp;符号与一些文字混在一起。我没有意识到这是一个禁忌,所以我逃脱了以下5个字符&amp;,&lt;,&gt;,“,'。我再次尝试并得到一个新错误,”只有一个顶级元素允许在XML文档中使用。处理资源“!@!

时出错

经过一番研究后,看来这个物体还有一些时髦的东西。所以我尝试在<![CDATA[" &amp; "]]>中包装可能的问题字符串。得到相同的“XML文档中只允许一个顶级元素。错误处理资源”错误!事实证明,有一些CSS以{color:#000000;}的格式滑落。出于某种原因,括号引起了问题。我假设原因是因为CSS的格式看起来很像JSON,而客户端就是这样看的。删除括号/ CSS后,“XML文档中只允许一个顶级元素。错误处理资源”消失,对象成功传输。

很抱歉,我找到了很长的描述性答案,但我没有看到其他人遇到这些问题,但没有提供有用的跟踪信息。希望这有助于其他人! (我在这里发帖,回答了我自己的问题,因为虽然这是一个简单的解决方案,但解决起来非常令人沮丧。)