【问题标题】:The WCF service which has net tcp and http bindings does not activate when calling the net tcp endpoint调用 net tcp 端点时,具有 net tcp 和 http 绑定的 WCF 服务不会激活
【发布时间】:2012-03-07 22:00:11
【问题描述】:

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

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

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

我想知道net tcp端点是否也可以激活服务。

【问题讨论】:

  • 激活错误通常会将某种事件写入 Windows 应用程序和/或系统事件日志。尝试在那里签到

标签: c# .net wcf


【解决方案1】:

由于您将服务配置为公开 netTcpBinding 端点,我假设您使用 IIS 7x 来托管它。 IIS 中的 Windows Process Activation Service (WAS) 托管服务存在一个问题,您需要确保 Net.Tcp 侦听器适配器(Windows 服务)正在运行。在“计算机管理”>“服务和应用程序”>“服务”窗格中进行检查(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 应用程序的配置不太正确。

【讨论】:

  • 我正在使用 IIs 75 来托管我的服务,并且还验证了 Net.Tcp 侦听器适配器正在运行。在我的 IIS 高级设置中还使用了 net.tcp 协议。当我尝试从 tcp 端点调用服务方法时,我仍然收到 avtication 异常。在 IIS 中回收应用程序池并从 http 端点调用服务方法工作并激活服务。回收应用程序池并尝试从 tcp 端点调用没有任何异常。我不确定为什么 tcp 端点没有激活服务。
  • 谢谢。我想这将帮助我解决我的问题。
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 2012-01-25
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
相关资源
最近更新 更多