Azure Service Fabric missing DLL on production server: FabricCommon.dll

大憨熊 提交于 2019-11-29 14:33:59

问题


I have created an actor service, which runs on a development cluster. An ASP.NET application (hosted separately via IIS), connects to the cluster and uses the actors. This works fine.

But when I deploy everything to the production environment, the ASP.NET application fails to connect to the cluster with the below exception. The cluster is hosted on-premise (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

It seems that the FabricCommon.dll could not be found on the web server (which hosts the ASP.NET).

I found that this file is part of the cluster installation package. On the development machine and cluster machines, the file is located here: C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code\FabricCommon.dll. But it is apparently not a dependency installed via NuGet in the client application.

Do I missed to install any prerequisites on the web server? Do I have to include the DLL manually?


回答1:


I think you need to install Service Fabric SDK on the web server.

See the link below: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-get-started/




回答2:


Add the following Service Fabric bin path to your PATH environment variable:

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

Also set execution policy to unrestricted:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force -Scope CurrentUser 



回答3:


I have this happen at one point in my dev machine. All I did was to reinstall the Service Fabric SDK.




回答4:


For cases when you can't install Service Fabric SDK on target environment there is an option to use Service Fabric REST API.

Here is my repo with API client written in C# which can resolve service using this API



来源:https://stackoverflow.com/questions/38013972/azure-service-fabric-missing-dll-on-production-server-fabriccommon-dll

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!