События не попадают в реализацию WCF-сервиса
У меня есть интерфейс службы WCF, класс, реализующий контракт, и приложение winforms для хостинга. Затем запускаются рабочие процессы, которые снова подключаются к серверу WCF, и затем должны запускаться события. У клиентского рабочего процесса нет проблем с выполнением вызовов методов, после чего я ожидаю, что подключенные обработчики событий также будут вызываться в приложении форм Windows, но этого не происходит:
xWCFService xWCFService = new xWCFService();
xWCFService.eventWorkerProcessStart += new EventHandler<WorkerProcessProgressChangedEventArgs>(xWCFService_eventWorkerProcessStart);
xWCFService.eventWorkerProcessStop += new EventHandler<WorkerProcessProgressChangedEventArgs>(xWCFService_eventWorkerProcessStop);
xWCFService.eventWorkerProcessUpdateProgress += new EventHandler<WorkerProcessProgressChangedEventArgs>(xWCFService_eventWorkerProcessUpdateProgress);
xWCFService.eventWorkerProcessError += new EventHandler<WorkerProcessProgressChangedEventArgs>(xWCFService_eventWorkerProcessError);
ServiceHost xServiceHost = new ServiceHost(xWCFService, new Uri(serviceAddress));
xServiceHost.AddServiceEndpoint(typeof(IxWCFServiceContract), new NetTcpBinding(), address);
xServiceHost.Open();
Я передаю экземпляр класса Service на сервисный хост, и это единственный экземпляр. Я ценю любую помощь / понимание, которое может быть предоставлено о том, почему я не ссылаюсь на правильный экземпляр.
1 ответ
После долгих чтений я заметил свою ошибку в коде на стороне клиента:
static xWCFService xwcfService = new xWCFService();
....
{
EndpointAddress endPoint = new EndpointAddress(new Uri(string.Format(xWCFServerBaseAddress, address) + address));
Binding binding = new NetTcpBinding();
xChannelFactory = new ChannelFactory<IxWCFServiceChannel>(binding, endPoint);
xChannelFactory.Open();
xServiceChannel = xChannelFactory.CreateChannel();
xServiceChannel.Open();
**xwcfService.WorkerProcessStartedParsing(strGuidClientIdentifier);**
Эта последняя строка была моей ошибкой, я вызывал вызовы службы через экземпляр класса реализации службы. Когда я использовал xServiceChannel для вызова методов службы, все события были вызваны.