WCF 客户端因服务中断而挂起

2024-05-09

我有一个相当简单的 WCF 服务,它为一堆智能客户端执行单向文件同步。我注意到,当通话期间出现网络或服务中断时,客户端将无法与服务器通信,直到整个应用程序重新启动。

该服务运行于BasicHttpBinding并由 IIS6(一个 .svc 页面)托管,使用transferMode="Streamed" and messageEncoding="Mtom"。该服务配置为使用默认的 InstanceContextMode (我认为是 Per Call?)和 ConcurrencyMode=Single。它使用默认的限制行为,但我处于一个没有其他人访问的隔离测试环境中。

客户端是Windows 服务。我正在用这个服务代理助手 http://bloggingabout.net/blogs/erwyn/archive/2006/12/09/WCF-Service-Proxy-Helper.aspx以确保连接Close()'d or Abort()正确时Dispose()d,虽然没有会议,所以我认为这并不重要。当发生错误时,Client 对象将被释放,然后超出范围。检测到异常后,服务会等待一段时间,然后创建一个新的客户端对象并重试。因此它应该从故障中恢复,但由于某种原因,所有后续对该服务的调用都会失败。

我可以通过启动客户端、允许它传输一些文件,然后重置服务器来可靠地重现这一点。首先,客户端通常会显示“服务太忙”错误(该错误映射到应用程序重新启动期间收到的 IIS 503 错误)。此后,所有后续对该服务的调用都会超时。据我所知,客户甚至没有尝试拨打电话。我启用了跟踪,我看到的是:超时错误,然后是“无法通过 HTTP 发送请求消息”警告,然后是另一个超时错误。

疯狂的是,当我在 app.config 中将客户端配置为使用 Fiddler(端口 8888)作为代理时,一切都按预期工作。因此,Fiddler 作为代理正在以某种方式关闭或完成某种类型的连接,而 WCF 本身则不会。

想法?

编辑 2009-10-30 8:54PM:将服务属性更改为:InstanceContextMode=Single 和 ConcurrencyMode=Multiple。没有不同。


嗯,那很痛苦。我花了很长时间,但最后我集中精力在使用代理运行与不使用代理运行之间的区别,并开始研究<system.net>设置。事实证明,向客户端添加此配置位可以解决问题:

  <system.net>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>
  </system.net>

有人可以解释一下发生了什么事吗?为什么此设置会导致 WCF 客户端在服务中断时无法修复地挂起?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF 客户端因服务中断而挂起 的相关文章

  • 我应该何时何地使用 WCF

    我浏览了几个在线教程 其中涵盖了 WCF 的优点 如何构建服务 客户端等 不过 我想了解一点整体情况 问题 gt 什么样的应用程序或应用程序中的哪些功能要求我使用 WCF 功能 一个具体的例子应该可以更好地帮助我 有几种情况 需要 WCF
  • WCF - AsyncPattern=true 或 IsOneWay=true

    我的 WCF 服务中很少有方法需要花费大量时间 生成报告和发送电子邮件 根据目前的要求 要求客户端应用程序只需提交请求 然后不等待整个过程完成 它将允许用户继续在客户端应用程序中执行其他操作 而不是等待整个过程完成 我很困惑该走哪条路 As
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 使用 WCF 支持“application/x-www-form-urlencoded”发布数据的最佳方式?

    我正在基于 W3C 规范构建 WCF 服务 该规范定义了接受 application x www form urlencoded 发布数据的 RESTful Web 服务端点 默认情况下 WCF 不支持这种类型的消息编码 我发现了许多创建如
  • WCF服务健康状况监控

    我刚刚实现了 WCF 服务 目前正在研究服务监控选项 我们的服务器团队目前仅托管 java 服务 希望我们的实例始终运行 因此它可以在该实例的生命周期内收集数据 他们表示将使用我们的 webmon 操作之一来获取统计信息 但我们正在使用每次
  • 如何为新的 Silverlight 应用程序在 WCF、REST、POX 和 RIA 服务之间进行选择

    There a lotSilverlight 应用程序连接回其服务器的不同方式 包括 WCF Windows 通信基础 http msdn microsoft com en us netframework aa663324 aspx RES
  • 为什么处置/关闭 WCF 客户端代理很重要

    我听说即使在以下情况下也必须处置 或关闭 WCF 客户端代理 你没有使用会话 没有需要确定性清理的非托管资源 例如打开的套接字 例如 当使用具有默认绑定配置的 BasicHttpBinding 时 即使在流行的网页中也应该没问题 对吧 va
  • 从 asp.net mvc ajax 调用 wcf

    我有两个应用程序 第一个是 WCF 服务 第二个是 asp net MVC 3 应用程序 在 WCF 应用程序中我有一个界面 ServiceContract public interface IService1 OperationContr
  • 使用 SOAP 调用 WCF 服务

    我正在尝试在不创建 WCF 客户端的情况下测试 WCF 服务 我有类似的代码 问题here https stackoverflow com a 1643025 1397017 我希望完全控制 SOAP 负载 因此我希望能够发出我自己的 We
  • 还有其他原因说明我应该考虑忽略发出默认值是一种不好的做法吗?

    我已经使用 WCF 一段时间了 并且在客户端和服务器倾向于共同发布的地方 也就是说 新版本几乎总是同时发布 互操作性和版本控制不是问题 至少在这种情况下 MSDN 文档 DataMemberAttribute EmitDefaultValu
  • WCF - 防止未经授权的客户端

    我有一个 WCF 服务 我只希望我的应用程序能够访问该服务 我的应用程序由使用 JQuery 的传统 Web 界面和 Silverlight 界面组成 这些界面都不需要用户登录 有没有办法告诉 WCF 服务仅允许来自我的域的客户端 如果是这
  • WCF - 在服务中抛出故障异常的开销

    我发布了一个question https stackoverflow com questions 81306 wcf faults exceptions versus messages关于使用消息与故障异常在服务之间传达业务规则 我的印象是
  • 如何在没有 ServiceHost 类的情况下使用 WCF 创建简单的 Web 服务器?

    我已经开始学习 WCF 并希望通过直接使用通道堆栈创建一个简单的 Web 服务器来了解其内部结构 我在网络上找到了很多理论 但我希望看到一个接收和响应 httprequest 的工作示例代码 我可以使用任何浏览器进行测试 我希望能够通过组装
  • 为什么我会从 WSDL 调用中得到 System.InvalidOperationException,但不会从对另一个服务的同一调用中得到 System.InvalidOperationException?

    我创建了服务来获取各个客户的国家 地区详细信息 但是在托管该服务时我遇到了此异常 我正在使用基本的 http 绑定 An ExceptionDetail likely created by IncludeExceptionDetailInF
  • WCF 数据服务错误处理

    我创建了一个带有服务操作的WCF数据服务 我想生成一种业务异常 我尝试生成WebFaultException但我不知道当服务操作抛出此错误时如何在客户端捕获此错误 这是我模拟异常的服务操作 WebGet public void Genera
  • 在 WCF 中通过 net.pipe 运行多个服务

    我正在构建一个分布式应用程序 需要 6 种不同的服务 我必须使用 Visual Studio 2008 在我的 XP 笔记本电脑上演示该应用程序 是否可以同时在 localhost 上运行多个服务 所有服务都使用 net pipe 例如 n
  • 如何在 IIS 中将 WCF 与 basichttpbinding only、SSL 和基本身份验证结合使用?

    是否可以仅使用 IIS 中的 SSL 和基本身份验证来设置 WCF 服务BasicHttpBinding binding 我无法使用wsHttpBinding binding 该站点托管在 IIS 7 上 并设置了以下身份验证 匿名访问 O
  • WCF - 将空元素转换为可为空的本机类型

    将 SOAP 字段元素留空会导致本机类型出现强制转换错误 遗憾的是 由于客户端限制 无法使用 xsi nil true 将 WCF 协定本机类型标记为 nullable 似乎不足以阻止将以下错误返回给客户端 字符串 不是有效的布尔值 在 S
  • 从 WCF 服务返回接口

    我有一些 NET 远程处理代码 其中在某些服务器端类中实现的工厂方法返回具体对象的接口 也在同一台服务器上执行 NET 远程处理会自动创建代理 并允许我将接口传递给客户端 然后客户端可以直接调用它们 接口示例 public interfac
  • 异步调用的任务限制?

    我有一个同步工作的 NET 4 5 WCF 客户端 我正在更新它以使用新的异步 等待功能来进行多个同时服务器调用以同时获取数据块 在结束之前 我担心同时运行的所有线程将使服务器饱和 更不用说明年升级到该角色时会终止我的 Azure 辅助角色

随机推荐