【问题标题】:wcf service portwcf 服务端口
【发布时间】:2011-03-20 05:37:27
【问题描述】:

我有两个进程在同一台机器上运行。每个进程都承载一个 WCF 服务,以允许异步进程间通信。到目前为止,我已经为这两个 wcf 服务分配了一个固定的端口 8731 和 9000。如果客户机器占用了这些端口怎么办?如果我要动态分配一个可用端口,如何让 wcf 客户端动态找到 wcf 服务?

提前感谢您的帮助。

【问题讨论】:

    标签: wcf


    【解决方案1】:

    我在这篇文章上迟到了,但今天我们有更好的解决方案来解决这个问题。 有一个配置端点称为listenUriMode(https://msdn.microsoft.com/en-us/library/system.servicemodel.description.listenurimode(v=vs.110).aspx),如果我们将此值设置为“唯一”,它将主机名绑定到端口0,这将要求操作系统分配一个空闲端口。

    现在客户端可以使用 WCF 发现 (https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/wcf-discovery-overview) 了解服务器端口。

    【讨论】:

      【解决方案2】:

      我假设您正在使用代码创建服务。如果你担心客户端没有可用的端口,you should configure your endpoints using app.config. 这样,如果客户端有端口问题,你可以简单地更改他们的配置文件而不是重新编译你的代码。

      【讨论】:

      • 有没有办法在代码中自动检测和更改这一点,并使用可用端口更新 app.config?
      • @subbu 当然。如果你能读懂 minds.WCF 允许你打开任何你想要的端点(只要盒子上的安全性允许你)。我处于类似的情况 - 我如何允许人们定义端点而不需要他们编辑 app.config。我确定除了约定之外别无他法——没有编译时安全。它很臭,但只要我通过文档使其显而易见并防止用户尽早犯错误,我就会尽可能地扩大“成功坑”。就我而言,在与WF打交道时,我别无选择。你可能有更多,这取决于。
      • 您可以尝试分配各种预配置的端口(例如,9000、9015、9033、8000、11221,...)并让客户端使用某种检测查询尝试所有这些端口你会定义。例如,假设服务尝试了 9000 并被占用,所以它尝试 9015 并被占用,然后它尝试 9033 并且它是免费的,因此它在该端口上侦听。客户,会发送某种“你是我需要的服务吗?”查询到 9000。当没有响应时,它会尝试 9015 并继续,直到在 9033 得到响应。
      • 然而,一个更简单的方法可能只是使用一个文件,服务会将它正在侦听的端口写入该文件,并让客户端读取该文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多