Azure - 将 WCF 服务作为 WebJob 运行

Posted

技术标签:

【中文标题】Azure - 将 WCF 服务作为 WebJob 运行【英文标题】:Azure - run a WCF service as a WebJob 【发布时间】:2018-04-28 09:45:29 【问题描述】:

我有一个向 WCF 服务器发送请求的 Web API。 WCF 项目正在使用 TopShelf 启动。

我的计划是将 API 和 WCF 都发布到 Azure。 为此,我在云中创建了一个应用服务,并在应用服务中发布了 Web API。

WCF 以 WebJob 的形式发布,因为我需要它连续运行,但是我收到此错误:

Topshelf.Hosts.ConsoleRunHost 错误:0:发生异常,System.ServiceModel.AddressAlreadyInUseException

这是因为 Web API 和 WCF 共享同一个应用服务吗?

我不知道这是否是正确的方法,还是我真的需要一个虚拟机?

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

您不能将 WCF 项目 TCP 端口暴露给外部,因为应用服务仅支持 80 和 443 用于面向 Internet 的连接。但在应用服务内部,您应该能够打开自定义套接字并使用它在服务之间进行通信。

文档的最佳位置可从此处获得:

https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#network-endpoint-listening

你可以检查几件事:

    确保 WCF 项目使用的是自定义 TCP 端口(不是 80、443) 您是否在共享计划中运行?

如果您无法使其正常工作,并且不想使用 Azure 的 IaaS 解决方案(虚拟机)并且更喜欢 PaaS,则可以查看 Azure Service Fabric。您应该很容易使用您的两个服务创建一个 Service Fabric 应用程序。

【讨论】:

谢谢,我检查了一下,我的 WCF 服务正在使用端口 50001,所以这应该不是问题。我不需要直接从 Internet 访问 WCF,这就是我使用 Web API 的原因。可以毫无问题地加载 Web API,但是在 Azure 中时不会通过对 WCF 的调用。另外,我没有在共享计划中运行 WCF。

以上是关于Azure - 将 WCF 服务作为 WebJob 运行的主要内容,如果未能解决你的问题,请参考以下文章

使 Azure Webjob 计时器触发器不作为单例运行

如何在 WebJob 中连接 Azure Python 包

Azure WebJob SDK 服务总线文档?

将 WebJob 部署到 Azure 时出错?

使用 WebJob 将 Web 应用程序发布到 Azure 时卡住

如何基于 Azure 中的服务总线队列自动缩放 Python webjob?