2016-02-16 2 views
0


Мой вопрос довольно прост, но я как-то потерялся.

У меня есть проект, включающий ClientProject и ServerProject (приложение службы WCF), содержащий мой класс сервиса и его интерфейс.
Служба запускает метод с несколькими итерациями.
Все, что мне нужно сделать, это показать на графическом интерфейсе номер итерации службы в реальном времени,
, чтобы пользователь мог быть осведомлен о состоянии активности службы во время работы.

Я видел примеры объявления делегата ServerEventHandler по сервису,
и регистрации этого события на стороне клиента.
Например:

ServiceProject:Показывать счетчик сервера в графическом интерфейсе во время его работы

public delegate void ServerEventHandler(object sender, EventArgs e); 
public event ServerEventHandler ServerEvent; <br/><br/> 

ClientProject:

public Client(Server s) 
{ 
    s.ServerEvent += new Server.ServerEventHandler(Subscribe); 
} 

Но я не могу понять, как я могу осуществить это на моем WCF проекта, так как мой клиент и сервер разделены проектами, так что единственный способ получить мои значения ServiceProject в моем ClientProject - через ServiceReference.
Я не могу понять, как клиент может иметь экземпляр службы и как он может получить доступ к свойству ServerEvent через него.

Что мне не хватает? Должен ли я упоминать что-либо о моем контракте?
Или есть ли другой способ его реализовать?

Я был бы благодарен, если вы будете в состоянии помочь мне ..

+0

можно реализовать WSDualHttpBinding, который позволяет определить контракт обратного вызова .. – Viru

+0

Вот ссылка которую вы можете обратиться https://code.msdn.microsoft.com/windowsdesktop/WCF-Sample-Service-with-41ef222f – Viru

+0

Привет. Я уже реализовал его. но когда я отправляю обратный вызов - продолжается ли процесс сервера? Кроме того, какое значение мне нужно отправить на этот обратный вызов, чтобы реализовать вышеприведенный код? Я был бы рад получить какой-либо пример. –

ответ

0

можно реализовать WSDualHttpBinding, которая позволяет определить контракт обратного вызова WCF поставляется с асинхронной дисперсией для каждого operation..you можно назвать операцию асинхронной при работе с обратным вызовом, чтобы серверный процесс продолжал работать ... Даже обратный вызов будет иметь DataContract, поэтому просто создайте класс DataContract, который будет содержать все значения, которые вы хотите отобразить в интерфейсе пользователя. Я могу вызвать обратный вызов как услугу, открытую клиентом, чтобы сервер мог уведомить клиента путем вызова соответствующей операции.

+0

Спасибо .. Это помогло мне решить мою проблему :) –