2016-03-25 8 views
0

Dans un de mon service sans état, je souhaite inclure deux auditeurs:Azure Service de tissu avec l'auditeur libre-hôte OWIN

Lorsque je tente d'enregistrer créé les auditeurs de façon standard, j'ai un problème d'écoute basé sur OWIN est fermé après i automaticaly nitialization:

Diagonstic events

partie responsable des services: enregistrement

 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)) 

     }; 
    } 

ports ServiceManifest installation:

<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); 
    } 
    ... 
} 

Comment puis-je résoudre ce problème et faire enregistrer ces deux écouteurs?

Répondre

2

Lorsque vous avez plus d'un écouteur, vous devez leur donner des noms uniques. Votre service peut échouer à cause de cela, ce qui l'obligerait à ouvrir et fermer encore et encore:

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") 
     } 
    }