Я заметил, что использование svcutil
вместо Add Service Reference
в Visual Studio приводит к сокращению времени генерации, хотя иногда сгенерированный код немного отличается (подробнее об этом позже).
На работе у нас есть служба WCF, состоящая из около 100 сервисных операций и 100 сервисных контрактов, а генерация прокси в Visual Studio 2012, начиная с WSDL, предоставляемой сервисом, занимает около 7 минут.Затем я попытался использовать svcutil
(без каких-либо опций), и генерация заняла всего около 2 минут.
Мне пришлось добавить несколько опций, чтобы соответствовать тем же характеристикам, указанным в справочнике услуг (/enableDataBinding
, /serializable
, /namespace:*,myns
, /syncOnly
и collectionType:System.ComponentModel.BindingList'1
) и с помощью этой опции время генерации увеличено до 3 с половиной минут.В целом генерация прокси не на порядок быстрее, но по крайней мере время генерации должно быть сокращено вдвое.
По моему опыту, у двух методов генерации есть некоторые различия, на которые я хотел бы обратить внимание:
Visual Studio создает файлы datasource
(файл, сгенерированный Visual Studio при добавлении источника данных объекта в проект Windows Forms, см. Также этот поток SO );svcutil
не имеет возможности их генерировать.Это не должно быть серьезной проблемой, так как при первой привязке данных к контракту файл должен быть сгенерирован Visual Studio.Кроме того, если прокси-сервер скомпилирован в отдельной сборке, ссылающийся проект не сможет повторно использовать сгенерированные файлы datasource
, поскольку они не включены в сборку и все равно будут восстановлены.
свойство ConfigurationName
контрактов на обслуживание может отличаться, очевидно, потому что два метода генерации по-разному учитывают целевое пространство имен при генерации значения атрибута.В нашем случае это проблема, поскольку мы не используем сгенерированный app.config
.Однако этим можно легко управлять, изменив app.config
в соответствии с новым значением или (автоматически) изменив свойство ConfigurationName
в созданном источнике прокси.
svcutil
делаетне украшайте свойство ExtensionData
атрибутом Browsable(false)
- это может быть проблемой, если (как и мы) вы используете контракты данных в качестве источника для привязки данных в Windows Forms, поскольку все сетки теперь получат дополнительный столбец для ExtensionData
.Как и предыдущий сбой, это можно сделать, добавив атрибут с помощью sed
-подобного инструмента (например, я использовал фрагмент PowerShell, содержащийся в этом ответе ).