Размещение и использование службы WCF из одного процесса

Можете ли вы стать клиентом службы WCF из процесса, в котором размещена служба WCF? Я попытался создать отдельные домены приложений в рамках одного процесса, но безуспешно. Подтверждено, что услуга доступна на Http, Net.TCP и Net.Pipe.

Спасибо за любую помощь!

Нат


person Community    schedule 24.12.2009    source источник
comment
Какие конкретно проблемы у вас возникают?   -  person Scott Weinstein    schedule 24.12.2009
comment
Почему? Вы должны иметь возможность использовать базовые методы напрямую, не беспокоясь о конечных точках.   -  person Firestrand    schedule 24.12.2009


Ответы (4)


У меня была такая же проблема, даже при использовании InProcFactory из ServiceModelEx.

Оказывается, как описано здесь , вам необходимо установить для ServiceBehavior значение not UseSynchronizationContext.

[ServiceBehavior(UseSynchronizationContext = false)]
public class MyService : IMyService {}
person StriplingWarrior    schedule 06.11.2012

Вы можете попробовать использовать сборку IDesign ServiceModelEx, которая упрощает процесс создания внутрипроцессного клиента для службы WCF.

Сборка включает класс InProcFactory, который динамически создает конечную точку Net.Pipe и прокси для вашей службы.

ServiceModelEx от IDesign.net

person Aviad P.    schedule 24.12.2009

да. После размещения службы WCF необходимо вызвать метод размещенной службы в отдельном потоке.

person samson    schedule 07.01.2010

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

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

Теперь немного не по теме - Firestrand спросил, почему вы хотите делать это из своего собственного приложения. Я создаю службу Windows и отдельный пользовательский интерфейс приложения WPF, для которого он должен взаимодействовать. Однако отладка служб Windows - это своего рода боль, поэтому большая часть работы службы, включая вызовы WCF, выполняется в отдельной DLL, на которую я могу ссылаться в приложении пользовательского интерфейса в «тестовом» режиме, который, по сути, просто вызывает процедуры запуска. что и сама служба Windows. Это позволяет мне отлаживать как пользовательский интерфейс, так и «смоделированную» службу без подключения к процессам, запуска нескольких процессов и т. Д. Кажется, он отлично работает. Как только пользовательский интерфейс и DLL будут завершены, я просто создам фактическую службу Windows, которая по сути является просто оболочкой для DLL, а затем, по крайней мере, скрою тестовый режим в пользовательском интерфейсе. Просто подумал, что поделюсь, если кто-то обнаружит, что этот подход может быть полезным.

person Dave    schedule 24.05.2011