2016-06-24 27 views
5

Ho creato un servizio attore, che viene eseguito su un cluster di sviluppo. Un'applicazione ASP.NET (ospitata separatamente tramite IIS), si connette al cluster e utilizza gli attori. Funziona beneAzure Service Fabric mancante DLL sul server di produzione: FabricCommon.dll

Tuttavia, quando distribuisco tutto nell'ambiente di produzione, l'applicazione ASP.NET non riesce a connettersi al cluster con l'eccezione seguente. Il cluster è ospitato in locale (Windows 2012 R2).

The type initializer for 'Microsoft.ServiceFabric.Services.ServiceTrace' threw an exception. 

Stacktrace: 
    at Microsoft.ServiceFabric.Services.Common.FabricServiceConfig.TryGetConfigPackageObject(String configPackageName, ConfigurationPackage& package) 
    at Microsoft.ServiceFabric.Services.Common.FabricServiceConfig.GetSettingsFilePath(String configPackageName) 
    at Microsoft.ServiceFabric.Services.Common.FabricServiceConfig.GetConfig() 
    at Microsoft.ServiceFabric.Services.Common.FabricServiceConfigSection.Initialize() 
    at Microsoft.ServiceFabric.Services.Communication.FabricTransport.Common.FabricTransportSettings.LoadFrom(String sectionName, String filepath, String configPackageName) 
    at Microsoft.ServiceFabric.Services.Communication.FabricTransport.Common.FabricTransportSettings.TryLoadFrom(String sectionName, FabricTransportSettings& settings, String filepath, String configPackageName) 
    at Microsoft.ServiceFabric.Services.Communication.FabricTransport.Common.FabricTransportSettings.GetDefault(String sectionName) 
    at Microsoft.ServiceFabric.Actors.Remoting.FabricTransport.FabricTransportActorRemotingProviderAttribute.CreateServiceRemotingClientFactory(IServiceRemotingCallbackClient callbackClient) 
    at Microsoft.ServiceFabric.Actors.Client.ActorProxyFactory.CreateServiceRemotingClientFactory(Type actorInterfaceType) 
    at Microsoft.ServiceFabric.Actors.Client.ActorProxyFactory.GetOrCreateServiceRemotingClientFactory(Type actorInterfaceType) 
    at Microsoft.ServiceFabric.Actors.Client.ActorProxyFactory.CreateActorProxy[TActorInterface](Uri serviceUri, ActorId actorId, String listenerName) 
    at Microsoft.ServiceFabric.Actors.Client.ActorProxy.Create[TActorInterface](ActorId actorId, Uri serviceUri, String listenerName) 

Inner Exception: 
innerExceptionType: System.DllNotFoundException 
innerStacktrace: 
    at System.Fabric.Interop.NativeCommon.FabricGetConfigStore(Guid& riid, IFabricConfigStoreUpdateHandler updateHandler) 
    at System.Fabric.Common.NativeConfigStore.CreateHelper(IFabricConfigStoreUpdateHandler updateHandler) 
    at System.Fabric.Interop.Utility.WrapNativeSyncInvoke[TResult](Func`1 func, String functionTag, String functionArgs) 
    at System.Fabric.Interop.Utility.RunInMTA[TResult](Func`1 func) 
    at Microsoft.ServiceFabric.Common.Tracing.Trace.InitializeFromConfigStore() 
    at Microsoft.ServiceFabric.Services.ServiceTrace..cctor() 
innerExceptionMessage: Unable to load DLL 'FabricCommon.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
exceptionType: System.TypeInitializationException 

sembra che il FabricCommon.dll non è stato trovato sul server web (che ospita l'ASP.NET).

Ho trovato che questo file fa parte del pacchetto di installazione del cluster. Sul computer di sviluppo e sui computer del cluster, il file si trova qui: C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code\FabricCommon.dll. Ma apparentemente non è una dipendenza installata tramite NuGet nell'applicazione client.

Mi è mancato installare eventuali prerequisiti sul server Web? Devo includere la DLL manualmente?

+0

si verifica l'errore descritto, quando tento di creare un ActorProxy. Ma nel frattempo (grazie a questo post: http://stackoverflow.com/questions/38015934/how-to-create-actor-proxy-to-remote-service-fabric-cluster) ho imparato, usando un ActorProxy da un'applicazione client al di fuori del cluster non funziona correttamente al momento. L'utilizzo di un servizio WebAPI senza stato all'interno della stessa applicazione SF è un'alternativa (come mostrato qui: https://github.com/Azure-Samples/service-fabric-dotnet-web-reference-app). – Henrik

risposta

2

Penso che sia necessario installare Service Fabric SDK sul server web.

consultare il link sottostante: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-get-started/

+0

Ciao. Questo ha risolto il mio particolare problema (DLL mancante). Tuttavia ho dovuto convertire il server web in una macchina di sviluppo. E la connessione al cluster remoto è ancora un problema. Nel frattempo ho trovato [questo] (http://stackoverflow.com/questions/38015934/how-to-create-actor-proxy-to-remote-service-fabric-cluster). – Henrik

1

ho questo accada a un certo punto nella mia macchina dev. Tutto ciò che ho fatto è stato reinstallare il Service Fabric SDK.

2

Aggiungere il seguente percorso bin Servizio tessuto alla variabile d'ambiente PATH:

set PATH=%PATH%;C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code 

impostare criteri di esecuzione anche a restrizioni:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUser 
0

Per i casi in cui non è possibile installare Servizio tessuto SDK su ambiente di destinazione c'è un'opzione per utilizzare Service Fabric REST API.

Ecco my repo con API client scritto in C# che può risolvere servizio utilizzando questa API