这是我的WCF服务.我想通知多个订阅者
一些更新,并以异步方式进行.我怎么做?
一些更新,并以异步方式进行.我怎么做?
// Callback contract public interface IMyServiceCallback { [OperationContract] void Notify(String sData); } public class MyService:IMyService { List<IMyServiceCallback> _subscribers = new List<IMyServiceCallback>(); // This function is used to subscribe to service. public bool Subscribe() { try { IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>(); if (!_subscribers.Contains(callback)) _subscribers.Add(callback); return true; } catch { return false; } } // this function is used to notify all the subsribers // I want ForEach to be asynchronous. public void OnGetMsg(string sData) { _subscribers.ForEach( callback => { if (((ICommunicationObject)callback).State == CommunicationState.Opened) { callback.Notify(sData); //THIS OPERATION } else { _subscribers.Remove(callback); } }); } }
> “MSDN: WCF Publisher/Subscriber Client crashing” is strongly related to my problem.
>我在创建此服务时遵循了Mini Webcast.
解决方法
你可以把它放到线程池:
ThreadPool.QueueUserWorkItem(o => callback.Notify(sData));
请注意,当您有许多不良订阅者时,它可能会阻塞您的线程池.您可能希望捕获异常并在失败时删除回调.
更新:如果您不想使用.NET线程池,那么您可以自己滚动,也可以使用SmartThreadPool
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。