在 Azure Service Fabric 中托管 WCF 服务

Hosting WCF service in Azure Service Fabric

我有一组要迁移到 Azure Service Fabric 的 WCF 服务。我正在为每个 WCF 服务创建服务结构无状态服务,并从我的结构服务中引用 WCF 服务库和合同。我的目标是对现有 WCF 服务库和合同进行零代码更改。结构服务就像包装器一样。

我在简单服务上成功了,我将 WCF 服务配置放入 fabric 服务(.NET 框架)的 app.config 文件中,现有 wcf 代码中的 system.configuration.configurationmanager 调用似乎工作正常.

但是,我尝试迁移的许多更复杂的服务包含使用 ChannelFactory 调用其他 WCF 服务的代码。我想知道这行得通吗? Azure Service Fabric 是否允许其服务通过 ChannelFactory 进行外部通信调用?

如何读取 Service Fabric 中的 WCF 跟踪日志?没有本地驱动器来存储日志文件?

当客户端调用结构中的 wcf 服务时,我也收到一般连接关闭错误。

[编辑] 负载均衡器已配置,但客户端仍然无法通过:


Could not connect to net.tcp://10.0.0.6:9012/. The connection attempt lasted for a time span of 00:00:21.0433425. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.0.0.6:9012. 
Server stack trace: 
   at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
   at System.ServiceModel.Channels.BufferedConnectionInitiator.Connect(Uri uri, TimeSpan timeout)
   at System.ServiceModel.Channels.ConnectionPoolHelper.EstablishConnection(TimeSpan timeout)
   at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Inner Exception:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 10.0.0.6:9012
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
   at System.ServiceModel.Channels.SocketConnectionInitiator.Connect(Uri uri, TimeSpan timeout)

Azure Service Fabric 是否允许其服务通过 ChannelFactory 进行外部通信调用?

  • Service Fabric 不会阻止您通过网络进行调用。请务必在服务清单中声明 endpoint,以便为调用保留该端口。

如何读取 Service Fabric 中的 WCF 跟踪日志?没有本地驱动器来存储日志文件?

  • 您 运行 在 virtual machines which have a data and a temp drive. However, I recommend using storage away from the cluster 上保存日志文件,以在集群缩减时保证它们的安全(例如)。

当客户端调用结构中的 wcf 服务时,我也收到一般连接关闭错误。

您是否将 Azure Load Balancer 配置为将流量转发到集群?

您是否考虑过 运行 WCF services as Windows Containers? 这样您可能根本不需要创建 SF 服务。

请注意,WCF 似乎 not 前途光明。