I have Service Fabric on Azure and I have Azure App Service (ASP.NET MVC website) which is the client for Service Fabric microservice.
When I run the web app it says: Unable to load DLL 'FabricCommon.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
I've seen Azure Service Fabric missing DLL on production server: FabricCommon.dll but I'm not sure it is possible to install service fabric SDK on azure App Service
Here is my client:
var factory = new CustomWcfCommunicationClientFactory<TContract>(
CreateDefaultNetTcpBinding(),
endpointBehaviors: new List<IEndpointBehavior> {new StarShipEnpointBehavior(up)},
endpointIdentity: EndpointIdentity.CreateDnsIdentity("MyIdentity"),
exceptionHandlers: new List<IExceptionHandler> {new WcfClientExceptionHandler()},
servicePartitionResolver: ServicePartitionResolver.GetDefault());
var serviceFabricDescription = dict[typeof(TContract)];
return new WcfCommunicationClient<TContract>(
factory,
serviceFabricDescription.Uri,
ServicePartitionKey.Singleton,
listenerName: serviceFabricDescription.ListenerName);
where 'CustomWcfCommunicationClientFactory' is almost same as 'WcfCommunicationClientFactory' from standard library 'Microsoft.ServiceFabric.Services.Wcf' but allows me to provide behaviours and identity
Here is the stack trace:
[DllNotFoundException: Unable to load DLL 'FabricCommon.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)]
System.Fabric.Interop.NativeCommon.FabricGetConfigStore(Guid& riid, IFabricConfigStoreUpdateHandler updateHandler) +0
System.Fabric.Common.NativeConfigStore.CreateHelper(IFabricConfigStoreUpdateHandler updateHandler) +93
System.Fabric.Interop.Utility.WrapNativeSyncInvoke(Func`1 func, String functionTag, String functionArgs) +29
System.Fabric.Interop.Utility.RunInMTA(Func`1 func) +55
System.Fabric.Common.Tracing.TraceConfig.InitializeFromConfigStore(Boolean forceUpdate) +133
Microsoft.ServiceFabric.Services.ServiceTrace..cctor() +23
[TypeInitializationException: The type initializer for 'Microsoft.ServiceFabric.Services.ServiceTrace' threw an exception.]
Microsoft.ServiceFabric.Services.Communication.Client.CommunicationClientCache`1..ctor(String traceId) +63
Microsoft.ServiceFabric.Services.Communication.Client.CommunicationClientFactoryBase`1..ctor(IServicePartitionResolver servicePartitionResolver, IEnumerable`1 exceptionHandlers, String traceId) +283
StarShip.Web.Logic.HelperService.CustomWcfCommunicationClientFactory`1..ctor(Binding clientBinding, IEnumerable`1 exceptionHandlers, IServicePartitionResolver servicePartitionResolver, String traceId, Object callback, ICollection`1 endpointBehaviors, EndpointIdentity endpointIdentity) +90
StarShip.Web.Logic.HelperService.WcfHelper.GetClient(ICurrentUserProvider up) +504
StarShip.Web.Logic.Services.<GetLocations>d__4.MoveNext() +98
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +14139120
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
StarShip.Web.Logic.Services.<CreateLoginModel>d__3.MoveNext() +260
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +14139120
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
StarShip.Web.Controllers.<Index>d__3.MoveNext() +215
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +14139120
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +62
System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +93
System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +22
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +386
System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +386
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +30
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +186
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +44
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +399
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +157
Ok The tricky part of my story was that I don't want to expose any of my Service Fabric endpoints for outside world. Instead I wanted to link Azure Web App to the Service Fabric cluster directly using VPN. The problem is that I cannot use service fabric classes without SDK installed. So I use HTTP API now. https://github.com/lAnubisl/ServiceFabricHttpApiClient