2011-11-26 6 views
0

Я осмотрелся и не нашел точно, что я ищу.Служба Windows Form и WCF

У меня есть форма окон и услуга ФОС в том же проекте, и я разместить службу ФОС жгутов формы, выполнив следующие действия:

Application.EnableVisualStyles(); 
Application.SetCompatibleTextRenderingDefault(false); 
ServiceHost host = new ServiceHost(typeof(Service1)); 
host.Open(); 

Application.Run(new Form1()); 
host.Close(); 

И приложение, которое использует сервис не имеют никаких проблем, призывающие его ,

Моя проблема теперь вызывает методы службы wcf в форме Windows. Я мог бы просто сделать

Service1 service = new Service1(); 
service.doWork(); 

Но, делая это, я не использую тот же экземпляр, как клиенты службы (даже если я использую InstanceMode.Single), и я хочу.

Я знаю, что могу просто реализовать форму окна в качестве GUI-клиента веб-службы (добавив ссылку на службу).

Но я просто хочу, чтобы служба wcf размещалась в форме окна и получала доступ к тому же экземпляру службы, что и клиенты wcf. Как я могу это сделать?

ответ

3

Имеет смысл «получить один и тот же экземпляр клиентов», если вы используете InstanceMode.Single, поэтому это было бы обязательным. Если вы это сделаете, вы можете использовать свойство ServiceHost.SingletonInstance. Это дает вам экземпляр (типа Object, поэтому вам нужно будет его использовать).

Я думаю, что для выполнения этой работы вам необходимо создать экземпляр ServiceHost с экземпляром Service1, а не с типом.

Смотреть это подробно:

http://msdn.microsoft.com/en-us/library/ms585487.aspx

В этом случае, вы можете просто держать ссылку на экземпляр, который используется для создания ServiceHost, а не сам ServiceHost, экономя Вам дополнительный звонок к ServiceHost.SingletonInstance ...

+0

Так что мне просто нужно было сделать что-то вроде: Service1 service = (Service1) host.SingletonInstance; обслуживание.DoWork(); –

+0

Да, вы можете. Или, как я уже сказал, если вы вручную создаете экземпляр объекта, чтобы использовать упомянутый конструктор, вы можете просто сохранить это доступное, а не проходить через хост. Имеет ли это смысл? –

+0

Просто отлично ... спасибо так много ... хорошая идея –

Смежные вопросы