private static IServiceRemotingListener CreateServiceRemotingListener( ServiceContext serviceContext, object serviceImplementation) { var serviceTypeInformation = ServiceTypeInformation.Get(serviceImplementation.GetType()); var interfaceTypes = serviceTypeInformation.InterfaceTypes; var provider = ServiceRemotingProviderAttribute.GetProvider(interfaceTypes); return(provider.CreateServiceRemotingListener(serviceContext, (IService)serviceImplementation)); }
private IServiceRemotingClientFactory CreateServiceRemotingClientFactory(Type serviceInterfaceType) { var callbackClient = new DummyServiceRemotingCallbackClient(); var factory = this.CreateServiceRemotingClientFactory(callbackClient); if (factory == null) { var provider = ServiceRemotingProviderAttribute.GetProvider(new[] { serviceInterfaceType }); factory = provider.CreateServiceRemotingClientFactory(callbackClient); } return(factory); }
private static IServiceRemotingListener CreateServiceRemotingListener( ServiceContext serviceContext, object serviceImplementation) { var serviceTypeInformation = ServiceTypeInformation.Get(serviceImplementation.GetType()); var interfaceTypes = serviceTypeInformation.InterfaceTypes; var provider = ServiceRemotingProviderAttribute.GetProvider(interfaceTypes); if (provider.RemotingListener.Equals(RemotingListener.V2Listener)) { throw new NotSupportedException( "This extension method doesnt support V2Listener or CompatListener. Use CreateServiceRemotingReplicaListeners for using V2Stack "); } return(provider.CreateServiceRemotingListener(serviceContext, (IService)serviceImplementation)); }
private ServiceRemotingProviderAttribute GetProviderAttribute(Type serviceInterfaceType) { return(ServiceRemotingProviderAttribute.GetProvider(new[] { serviceInterfaceType })); }
/// <summary> /// An extension method that creates an <see cref="IServiceRemotingListener"/> /// for a stateful service implementation. /// <typeparam name="TStatefulService">Type constraint on the service implementation. The service implementation must /// derive from <see cref="Microsoft.ServiceFabric.Services.Runtime.StatefulServiceBase"/> and implement one or more /// interfaces that derive from <see cref="Microsoft.ServiceFabric.Services.Remoting.IService"/> interface.</typeparam> ///</summary> /// <param name="serviceImplementation">A stateful service implementation.</param> /// <returns>A <see cref="IServiceRemotingListener"/> communication /// listener that remotes the interfaces deriving from <see cref="Microsoft.ServiceFabric.Services.Remoting.IService"/> interface.</returns> public static IEnumerable <ServiceReplicaListener> CreateServiceRemotingReplicaListeners <TStatefulService>( this TStatefulService serviceImplementation) where TStatefulService : StatefulServiceBase, IService { var serviceTypeInformation = ServiceTypeInformation.Get(serviceImplementation.GetType()); var interfaceTypes = serviceTypeInformation.InterfaceTypes; var impl = (IService)serviceImplementation; var provider = ServiceRemotingProviderAttribute.GetProvider(interfaceTypes); #if !DotNetCoreClr if (provider.RemotingListener.Equals(RemotingListener.V2Listener)) { return(new[] { new ServiceReplicaListener( (t) => { return provider.CreateServiceRemotingListenerV2(serviceImplementation.Context, impl); }, ServiceRemotingProviderAttribute.DefaultV2listenerName ) }); } if (provider.RemotingListener.Equals(RemotingListener.CompatListener)) { return(new[] { new ServiceReplicaListener((t) => { return provider.CreateServiceRemotingListener(serviceImplementation.Context, impl); } ), new ServiceReplicaListener( (t) => { return provider.CreateServiceRemotingListenerV2(serviceImplementation.Context, impl); }, ServiceRemotingProviderAttribute.DefaultV2listenerName ) }); } else { return(new[] { new ServiceReplicaListener((t) => { return provider.CreateServiceRemotingListener(serviceImplementation.Context, impl); } ) }); } #else return(new[] { new ServiceReplicaListener( (t) => { return provider.CreateServiceRemotingListenerV2(serviceImplementation.Context, impl); }, ServiceRemotingProviderAttribute.DefaultV2listenerName ) }); #endif }