Генерация прокси wcf против ChannelFactory - PullRequest
5 голосов
/ 05 августа 2010

Какой из этих двух способов лучше использовать сервис wcf?почему?

  1. Генерация прокси из справочника услуг
  2. с использованием ChannelFactory

ex.

ChannelFactory<IMyContract> factory = new ChannelFactory<IMyContract>();
IMyContract proxy1 = factory.CreateChannel();
proxy1.MyMethod();

Это немного скучноВызовите службу wcf, например , поэтому

IMyContract proxy1 = null; 
try
{
    proxy1 = factory.CreateChannel();
    proxy1.MyMethod();
    ((ICommunicationObject)proxy1).Close();
}
catch
{
   ((ICommunicationObject)proxy1).Abort();
}

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

Является ли запись такого класса ServiceExecution.Execute(proxy=>proxy.MyMethod());, который создает прокси, и закрывает или прерывает его хорошим способом сделать это?

Ответы [ 4 ]

3 голосов
/ 06 августа 2010

Здесь - это запись MSDN, в которой рекомендуется не использовать сгенерированные прокси в .Net 3, поскольку каждый раз при создании ChanelFactory создается кэш .Net 3.5.

Но лично я предпочитаю использовать ChanelFactory сам, сгенерированный код - это всегда боль, даже после выхода partials

2 голосов
/ 05 августа 2010

Я предлагаю использовать подход 1.

Я нашел этот блог с примером, включающим исходный код, который также объясняет, как правильно обрабатывать соединение (закрытие, прерывание и т. Д.),Блог также содержит ссылки для более подробной информации на MSDN.

2 голосов
/ 05 августа 2010

В первом случае, когда вы используете VS для добавления Service Reference, он генерирует весь код для вас, включая ServiceContrcats и DataContracts.

Но когда вы используете ChannelFactory, у вас уже должны быть контракты на обслуживание и т. Д. На стороне клиента..

0 голосов
/ 05 августа 2010

Хорошей альтернативой может быть создание прокси-серверов вручную из запущенной службы. Инструмент svcutil - это то, что Visual Studio использует при добавлении ссылки на службу. Используя это, вы можете сгенерировать прокси-класс в общем месте, а затем ссылаться на него в каждом проекте, который вам требуется, а также получить лучший контроль над вашими прокси-классами.

Например, чтобы сгенерировать прокси для службы с именем TestService , работающей локально на порту 8000, вы должны выполнить следующую команду в командной строке Visual Studio, сгенерировав прокси-класс TestServiceProxy.cs в каталоге прокси .

cd "C:\src\proxies"
svcutil /noLogo /out:TestServiceProxy http://localhost:8000/TestService

Есть несколько других полезных параметров для инструмента, например:

Добавить /n:*,WcfServices.TestService будет указывать пространство имен для прокси-класса.

Добавьте /config:TestServiceProxy.config, и svcutil создаст образец файла конфигурации для использования TestService, включая конечные точки, привязки и т. Д.

Добавьте /r:"Common.dll", и прокси-класс, созданный svcutil, не будет иметь определений для типов, используемых службой, но определен в сборке Common.dll.

Используйте svcutil /? для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...