带有OWIN自托管侦听器的Azure Service Fabric

Przemek Marcinkiewicz

在我的无状态服务之一中,我想包括两个侦听器:

当我尝试以标准方式注册创建的侦听器时,我遇到一个问题,即基于OWIN的侦听器在初始化后会自动关闭:

对角事件

负责注册服务的部分:

        protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
        {
           return new List<ServiceReplicaListener>
           {
              new ServiceReplicaListener(parameters => new OwinCommunicationListener("account",new Startup(), parameters)),
              new ServiceReplicaListener(parameters => new ServiceRemotingListener<AccountService>(parameters, this))

        };
    }

ServiceManifest端口设置:

<Resources>
  <Endpoints>
    <Endpoint Name="ServiceEndpoint" />
    <Endpoint Name="WebApiEndpoint" Type="Input" Protocol="http" Port="8083"/>
    <Endpoint Name="ReplicatorEndpoint" />
  </Endpoints>
</Resources>

OwinCommunicationListener:

public class OwinCommunicationListener: ICommunicationListener
{
    private readonly IOwinAppBuilder startup;
    private readonly string appRoot;
    private IDisposable serverHandle;
    private string listeningAddress;
    private readonly ServiceInitializationParameters serviceInitializationParameters;

    public OwinCommunicationListener(string appRoot, IOwinAppBuilder startup, ServiceInitializationParameters serviceInitializationParameters)
    {
        this.startup = startup;
        this.appRoot = appRoot;
        this.serviceInitializationParameters = serviceInitializationParameters;
    }

    public Task<string> OpenAsync(CancellationToken cancellationToken)
    {
        EndpointResourceDescription serviceEndpoint = serviceInitializationParameters.CodePackageActivationContext.GetEndpoint("WebApiEndpointB");
        int port = serviceEndpoint.Port;
        listeningAddress = string.Format(CultureInfo.InvariantCulture,"http://+:{0}/{1}",port,string.IsNullOrWhiteSpace(appRoot)? string.Empty: appRoot.TrimEnd('/') + '/');
        serverHandle = WebApp.Start(listeningAddress, appBuilder => startup.Configuration(appBuilder));
        string publishAddress = listeningAddress.Replace("+", FabricRuntime.GetNodeContext().IPAddressOrFQDN);
        ServiceEventSource.Current.Message("Listening on {0}", publishAddress);
        return Task.FromResult(publishAddress);
    }
    ...
}

如何解决这个问题并注册这两个侦听器?

瓦茨拉夫·图雷切克(Vaclav Turecek)

当您有多个侦听器时,必须给它们指定唯一的名称。因此,您的服务可能会失败,这将导致它一遍又一遍地打开和关闭:

    protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
    {
        return new List<ServiceReplicaListener>
       {
          new ServiceReplicaListener(parameters => new OwinCommunicationListener("account",new Startup(), parameters), "accountListener"),
          new ServiceReplicaListener(parameters => new ServiceRemotingListener<AccountService>(parameters, this), "remotingListener")
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Azure Service Fabric的使用

来自分类Dev

Azure Service Fabric 路由

来自分类Dev

Service Fabric服务中的多个通信侦听器

来自分类Dev

Service Fabric服务中的多个通信侦听器

来自分类Dev

在 Azure Service Fabric 中托管 WCF 服务

来自分类Dev

Azure Service Fabric消息队列

来自分类Dev

Service Fabric Azure测试环境

来自分类Dev

Azure Service Fabric多租户

来自分类Dev

Azure Service Fabric更改IP

来自分类Dev

Azure Service Fabric提醒GetReminder

来自分类Dev

Azure Service Fabric v 单体

来自分类Dev

将OWIN自托管Service Fabric应用程序部署到云后的端点

来自分类Dev

Service Fabric -- CreateServiceInstanceListeners -- 多个侦听器 -- "yield return" 或 "return new[]"

来自分类Dev

在 Azure Service Fabric 上创建 UDP 侦听服务

来自分类Dev

Azure Service Fabric中可靠的Blob状态?

来自分类Dev

在Azure Service Fabric上设置TCP

来自分类Dev

Azure Service Fabric actor提醒更新?

来自分类Dev

Azure Service Fabric群集设置问题

来自分类Dev

Azure Service Fabric加入虚拟网络

来自分类Dev

在Azure Service Fabric中动态创建服务

来自分类Dev

Azure Service Fabric中的发布/订阅模式

来自分类Dev

Azure Service Fabric Actor依赖项注入

来自分类Dev

Azure Service Fabric actor微服务

来自分类Dev

将SignalR与Azure Service Fabric结合使用

来自分类Dev

Azure Service Fabric可靠的集合和内存

来自分类Dev

如何关闭Azure Service Fabric的本地实例?

来自分类Dev

查询Azure Service Fabric中的Actor列表

来自分类Dev

在Azure中收集Service Fabric群集日志

来自分类Dev

Azure Service Fabric内部负载平衡