Использует ли Visual Studio 2008 SvcUtil.exe, и если «Нет», есть ли какие-либо недостатки в использовании svcutil? - PullRequest
4 голосов
/ 03 января 2009

После небольшого поиска в Google нет определенного ответа на вопрос, использует ли Visual Studio 2008 svcutil.exe или нет? Visual Studio 2005 использовала его, но используют ли RTM-версии Visual Studio 2008 svcutil? В нескольких блогах говорится, что это не так (и это кажется удивительным)

и другие сайты говорят, что это так.

Причина, по которой я спрашиваю, заключается в том, что мы сглаживаем наш wsdl WCF с помощью пользовательского расширения поведения конечной точки (реализация IWsdlExportExtension / IEndpointBehavior) и с помощью сглаженного wsdl с помощью Add Reference в Visual Studio 2008 дает нам ошибки компиляции, поскольку они дублируют типы / Классы. Ссылка добавлена ​​без ошибок. SvcUtil, с другой стороны, выбрасывает дублирующийся класс в отдельное пространство имен, которое устраняет проблему сборки.

Итак, SvcUtil работает, но Visual Studio 2008 не работает на некоторых наших плоских wsdls. Мы можем продолжать использовать svcutil, если Add Service Reference в Visual Studio не работает, но задаемся вопросом, знает ли кто-нибудь, есть ли какие-либо последствия для этого. Я не смог найти никаких доказательств того, что мы «не должны» использовать svcutil, просто это не так просто, как использование ссылки на службу в Visual Studio 2008.

Ответы [ 5 ]

4 голосов
/ 22 июля 2009

svcutil и VS2008 в конечном итоге вызывают один и тот же бит кода WCF. Использует ли он настоящий exe или вызывает в dll - мелкая деталь. Во всяком случае, я предпочитаю инструмент командной строки, поскольку он обеспечивает большую гибкость (или, может быть, мне просто нравится командная строка ;-p).

Обратите внимание, что WCF может повторно использовать существующие типы как через IDE, так и из командной строки (/ r?). Но этот тип проблем с пространством имен - лишь одна из многих вещей, которые я предпочитаю использовать в командной строке.

1 голос
/ 07 января 2010

Это старый вопрос, и он возник, когда я искал что-то подобное, поэтому я упомяну то, что нашел.

В этом блоге утверждается, что VS2008 не использует svcutil для генерации прокси. Я согласен с ним, так как svcutil не появляется в списке процессов диспетчера задач, когда вы добавляете ссылку на сервис. Они также дают заметно различный вывод - например, svcutil не производит прокси, которые готовы к использованию в приложении Silverlight, вы должны урезать из них разумное количество вещей (таких как интерфейсы или ссылки на объекты, которые не доступны в сборках этот серебряный свет может использовать *).

Тем не менее, нетрудно написать небольшое приложение, которое вызывает svcutil для выполнения тяжелой работы, а затем выполнить очистку сгенерированных файлов.

*, возможно, можно избежать этой проблемы, указав другую версию фреймворка с ключом /targetClientVersion, но я еще не пробовал.

1 голос
/ 22 июля 2009

Я никогда не видел причин полагать, что Visual Studio вызывает svcutil.exe или wsdl.exe. В обоих случаях консольные приложения и Visual Studio используют один и тот же код .NET Framework для своей работы.

Учтите, что некоторые ошибки, возникающие при выполнении команды «Добавить ссылку на службу», отображаются в окне «Ошибки» Visual Studio, а не в окне «Вывод». Для помещения сообщений в окно «Ошибки» необходимо вызвать API Visual Studio, чего не мог сделать svcutil.exe.

0 голосов
/ 22 июля 2009

Я бы сказал, что Visual Studio 2008 не использует svcutil.exe. Ну, по крайней мере, не напрямую.

Я использовал Process Monitor, чтобы видеть, какие приложения выполняются на моей машине, при добавлении новой ссылки на службу в мой проект, и не смог найти «svcutil» в журнале.

0 голосов
/ 05 января 2009

Я бы сказал, что Visual Studio 2008 использует svcutil для генерации прокси-кода.

В качестве доказательства просто используйте Visual Studio для генерации прокси-кода и откройте файл Reference.cs (если он был создан в C #), в заголовке которого вы увидите этот файл:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.3053
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

Теперь используйте командную строку svcutil для генерации прокси-кода. Откройте сгенерированный файл, и вы увидите точно такой же заголовок.

Кроме того, при просмотре доступных параметров в Visual Studio 2008 при добавлении ссылки на службу каждый параметр соответствует аргументу svcutil.

...