Создание приложений WCF без svcutil.exe? - PullRequest
7 голосов
/ 19 ноября 2008

Как создать приложение WCF без использования инструмента svcutil.exe?

Ответы [ 3 ]

7 голосов
/ 22 ноября 2008

Один из способов создать свой клиент WCF без использования svcutil.exe - это использовать ChannelFactory. Что вам нужно сделать, это построить интерфейс службы WCF в отдельной сборке от реализации службы. Затем вы можете ссылаться на эту сборку интерфейса как у вашего клиента, так и у вашего сервиса.

Получив ссылку, вы можете использовать следующий код для создания клиента WCF:

var factory = new ChannelFactory<IMyWcfService>();
var wcfClient = factory.CreateChannel();
bool closedSuccessfully = false;

try
{
    // Now you can make calls on the wcfClient object
    ((ICommunicationObject)wcfClient).Close();
    closedSuccessfully = true;
}
finally
{
    if (!closedSuccessfully)
    {
        ((ICommunicationObject)wcfClient).Abort();
    }
} 

Обратите внимание на процедуру очистки. Вы не можете надежно использовать оператор using для очистки переменной wcfClient. Если вы это сделаете, и объект находится в состоянии сбоя, вы получите исключение, когда блок using () выходит из области видимости и Dispose () выполняется для переменной wcfClient. См. блог Джесси Эзелла

5 голосов
/ 19 ноября 2008

Какую версию Visual Studio вы используете?

VS2008 включает в себя функциональность инструмента svcutil. Чтобы сгенерировать прокси, нажмите Solution Explorer и выберите «Add Service Reference», затем вы можете ввести URL-адрес сервера, присвоить пространству имен имя и все готово.

Возможно, вы захотите расширить свой вопрос, чтобы предоставить более подробную информацию о том, чего вы хотите достичь.

4 голосов
/ 19 ноября 2008

Средство svcutil.exe (и эквивалентные функции в VS2008) обычно используются следующим образом: -

Вы указываете его на описание сервиса (документ WSDL), и он генерирует код и конфигурацию на стороне клиента, чтобы помочь вам создать клиент, который может взаимодействовать со службами, описанными в WSDL. Инструменты могут делать и другие вещи, но это то, для чего они чаще всего используются. Я предполагаю, что вы используете именно этот файл svcutil.exe.

Так что, если у вас есть существующий сервис, возможно, написанный с использованием другого стека (не WCF), использование svcutil сделает вашу жизнь проще, чем она была бы в противном случае. Но помните, сгенерированный код и конфигурация могли быть написаны вами. Обычно конфигурация выглядит многословно, потому что инструмент помещает туда все значения по умолчанию. Если вы написали конфигурацию самостоятельно, вы, вероятно, можете пропустить большую ее часть.

Если вы пишете клиент и сервис самостоятельно, используя WCF, практически нет причин использовать svcutil.exe. Когда вы определяете [ServiceContract], вы можете использовать это же определение и в клиенте, и в сервисе. Когда вы создаете свой файл конфигурации службы, это простая задача - создать файл конфигурации клиента на его основе - большая часть содержимого одинакова.

В конце концов, ничто не заменит понимание того, что на самом деле означает весь код / ​​конфиг, сгенерированный svcutil.exe. Тогда вы сможете работать без него.

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