我有一个工作正常的WCF Web服务.然而,有一个特定的呼叫失败 - 但只对某些用户失败.调用非常简单 - 它是一个获取Person对象列表的调用.
对于用户A,它工作正常.该服务查询数据库,创建Person对象列表并将其返回给调用应用程序.
对于用户B,它失败了.奇怪的是,当我调试服务似乎工作正常.它能够查询数据库并创建List对象并返回它.服务本身永远不会失败.但客户端应用程序收到"远程主机强行关闭现有连接"错误.
对我来说,当服务层试图以XML格式打包数据以发送回调用应用程序时,似乎发生了一些事情.我认为它必须是一个数据相关的问题,因为该调用适用于其他用户.我在视觉上看了看数据,我真的没有看到任何奇怪的东西.一个猜测是,用户B的数据有一些时髦的隐藏字符,因此导致服务意外关闭.这样的事情.
有任何想法吗?
Nat*_*eat 72
我发现诊断这类事情的最好的事情是服务跟踪查看器.设置起来非常简单(假设您可以编辑配置):
http://msdn.microsoft.com/en-us/library/ms732023.aspx
希望这可以帮助.
小智 23
我有这个问题,因为我的网站没有绑定到SSL端口的证书.我以为我会提到它,因为我在googleweb的任何地方都没有找到这个答案,我花了几个小时来搞清楚.在事件查看器中没有显示任何内容,这对于诊断来说非常棒.希望这可以拯救别人的痛苦.
kd7*_*kd7 11
我曾见过这一次.用户是否要求不同数量的数据?我发现即使您可以为数据有效负载(即maxReceivedMessageSize)配置绑定,也要httpRuntime maxRequestLength胜过WCF设置,因此如果IIS尝试提供超过该设置的请求,则会出现此行为.
可以这样想:
如果maxReceivedMessageSize您的WCF行为是12MB,并且maxRequestLength是4MB(默认),则IIS获胜.
我发现如果返回的对象只有getter只在构造函数中初始化的自动属性(使用C#6.0语法),则会出现此错误.
我相信这是由于WCF使用无参数构造函数在客户端反序列化对象,然后在对象上设置属性.它需要有一个set 可用的(它可以是私有的)来填充对象,否则它将失败.
我现在只在服务器中遇到此错误,解决方案是maxItemsInObjectGraph在<behavior>标记下的wcf web.config中设置一个属性:
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
207481 次 |
| 最近记录: |