c# - 调用 net tcp 端点时,具有 net tcp 和 http 绑定(bind)的 WCF 服务不会激活

标签 c# .net wcf

我创建了一个有 2 个端点的 WCF 服务:一个有 netTcpBinding 和另一个 WsHttpBinding

我将服务本地部署到 IIS 站点。然后我创建了一个控制台应用程序并在我的本地机器上添加了一个服务引用。然后我使用 tcp 端点调用服务方法,它因激活错误而失败。

回收应用程序池并调用 http 端点上的服务方法工作并激活了服务。之后 tcp 端点也工作了。

我想知道是否有一种方法可以让 net tcp 端点也激活该服务。

最佳答案

由于您正在配置服务以公开 netTcpBinding 端点,因此我假设您正在使用 IIS 7x 来托管它。 IIS 中的 Windows Process Activation Service (WAS) 托管服务存在问题,您需要确保 Net.Tcp Listener Adapter(Windows 服务)正在运行。在“计算机管理”>“服务和应用程序”>“服务” Pane 中检查此项(Windows 2008 Server 的路径可能略有不同,但您明白了)。

同时检查“属性”对话框的“登录”选项卡,并确保它使用的登录帐户在托管 WCF 的站点上至少具有读取和执行权限(可能需要完全权限,但我记不太清了)服务。

编辑:

根据您的评论,您描述的行为是 netMsmqBinding 的常见问题。 IIS 将在一段时间不活动(我认为默认值为 20 分钟)后“停止”WCF 服务实例以节省内存和资源。停止后,MSMQ 监听器适配器有时不会在检测到队列中的新消息时“唤醒”相应的服务。大多数情况下,这是因为 net.msmq 监听器适配器的帐户没有权限访问为该服务配置的队列。

在您的情况下,net.tcp 监听器适配器似乎无法启动新的服务实例来以与 MSMQ 问题类似的方式处理传入的 TCP 请求。要解决问题,请尝试使用 TCPView在托管服务的服务器上,当服务处于事件状态时以及服务处于非事件状态的时间足以让 IIS 停止服务时,监视传入的请求。您还可以使用 Resource Monitor这是任务管理器的一部分,用于在您的客户端调用时查看哪些进程正在使用网络资源。查看 net.tcp 监听器适配器服务是否正在接收任何网络流量。

似乎基本问题是 net.tcp 监听器适配器在接收服务端点的 TCP 流量时没有启动 WCF 服务实例。我的客户为 netTcpBinding 配置了许多服务,但我不记得他们过去有过这个问题。这让我怀疑 net-tcp 监听器适配器或 IIS 中的网站/Web 应用程序的配置不太正确。

关于c# - 调用 net tcp 端点时,具有 net tcp 和 http 绑定(bind)的 WCF 服务不会激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587138/

相关文章:

.net - 获取一次数据库命中中的总记录数和自定义记录数

.net - WebAPI - 属性路由破坏了 WebAPI Cors 的 DELETE?

asp.net - WCF 数据服务作为库

c# - 列中的按钮,获取它来自 Click 事件处理程序的行

c# - 将多个资源文件加载到一个资源管理器中

c# - LLBLGen - TransactionScope 或 DataAccessAdapter.StartTransaction

WCF over TCP,具有用户名身份验证且无证书

c# - 与数据库的父子进程通信的最佳设计

c# - 如何防止被零除?

c# - 在不修改 TextBox 中的文本的情况下捕获并处理 KeyPress/KeyDown