Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
- public class service1:IService1
- {
- public static List<service1> servicesInstances = new List<service1>();
- ParallelOptions paralleOptions = new ParallelOptions();
- public static init()
- {
- TimerCallback processDataTimerDelegate = new TimerCallback(ProcessData);
- Timer processDataTimerDelegateItem = new Timer(processDataTimerDelegate , new object(), 0, 1000);
- Thread DispatchMWThread = new Thread(new ThreadStart(dispatchData));
- DispatchMWThread.IsBackground = true;
- DispatchMWThread.Priority = ThreadPriority.Highest;
- DispatchMWThread.Start();
- paralleOptions.MaxDegreeOfParallelism = -1;
- }
- public void login()
- {
- Monitor.TryEnter(servicesInstances);
- servicesInstances.Add((service1)OperationContext.Current.InstanceContext.GetServiceInstance());
- Monitor.Exit(servicesInstances);
- }
- public static void ProcessData(object obj)
- {
- //some code to process data for all clients
- }
- public static void dispatchData()
- {
- //When data processed is ready. Dispatch data concurrently
- Parallel.foreach(serviceInstances, delegate(service1)
- {
- service1.callbackData();
- }
- }
- <serviceBehaviors>
- <behavior name="service1.mybehaviour">
- <serviceMetadata httpGetEnabled="false"/>
- <serviceDebug includeExceptionDetailInFaults="true"/>
- <serviceThrottling maxConcurrentCalls="5000" maxConcurrentInstances="5000" maxConcurrentSessions="5000"/>
- </behavior>
- </serviceBehaviors>
- <netTcpBinding>
- <binding name="MyServiceBinding" listenBacklog="2500" maxConnections="5000" portSharingEnabled="true" maxReceivedMessageSize="4194304" maxBufferPoolSize="0">
- <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
- <reliableSession ordered="true" inactivityTimeout="00:20:00" enabled="false"/>
- <security mode="None">
- <message clientCredentialType="None"/>
- </security>
- </binding>
- </netTcpBinding>
- [OperationContract(IsOneWay = true)]
- Task OnPushData(data);
- public async Task PublishData()
- {
- communicationCallback = (ICommunicationObject)service.Callback;
- if (communicationCallback.State == CommunicationState.Opened)
- {
- await service.Callback.OnPushData(data);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement