Visual Studio basicHttpBinding и проблемы с конечной точкой - PullRequest
2 голосов
/ 16 сентября 2008

У меня есть приложение WPF в VS 2008 с некоторыми ссылками на веб-сервисы. По разным причинам (максимальный размер сообщения, методы аутентификации) мне нужно вручную определить ряд параметров в app.config клиента WPF для привязок службы.

К сожалению, это означает, что когда я обновляю ссылки на сервисы в проекте, мы получаем беспорядок - множественные привязки и конечные точки. Visual Studio создает новые привязки и конечные точки с числовым суффиксом (т. Е. «Service1» как дубликат «Service»), что приводит к неверной конфигурации, так как в проекте может быть только одна привязка для каждой ссылки на службу.

Это легко скопировать - просто создайте простой веб-сервис ASP.Net "Hello World" и приложение WPF в решении, измените maxBufferSize и maxReceivedMessageSize в привязке app.config, а затем обновите ссылку на службу.

В данный момент мы работаем над этим, просто отменив извлечение файла app.config после обновления ссылок, но я не могу не думать, что должен быть лучший способ!

Кроме того, настройки, которые нам нужно изменить вручную:

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm" />
</security>

и

<binding maxBufferSize="655360" maxReceivedMessageSize="655360" />

Мы используем класс фабрики услуг, поэтому, если эти настройки можно каким-то образом установить программным способом, это сработает, хотя свойства, кажется, не выставляются.

Ответы [ 5 ]

2 голосов
/ 16 сентября 2008

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

2 голосов
/ 16 сентября 2008

Создайте файл .Bat, который использует svcutil для генерации прокси, который имеет настройки, подходящие для вашего проекта. Это довольно просто. Нажав на batfile, легко генерировать новые прокси-файлы при каждом изменении интерфейса.

Пакет может позже использоваться в автоматизированных сборках. Тогда вам нужно только настроить app.config (или web.config) один раз. Обычно мы разделяем разные конфиги для разных сред, таких как dev, test prod.

Пример (обратите внимание на разрывы строк):

REM generate meta data
call "SVCUTIL.EXE" /t:metadata "MyProject.dll" /reference:"MyReference.dll"

REM making sure the file is writable
attrib -r "MyServiceProxy.cs"

REM create new proxy file
call "SVCUTIL.EXE" /t:code *.wsdl *.xsd /serializable /serializer:Auto /collectionType:System.Collections.Generic.List`1  /out:"MyServiceProxy.cs" /namespace:*,MY.Name.Space /reference:"MyReference.dll" 

:)

// W

0 голосов
/ 17 сентября 2008

Что мы делаем, мы извлекаем (из управления исходным кодом) файлы app.config и * .cs, которые автоматически создаются утилитой svcutil.exe, а затем запускаем пакетный файл, который запускает svcutil.exe для получения метаданных службы , Когда это будет сделано, мы перекомпилируем код, убедитесь, что он работает, а затем вернем обратно обновленные файлы app.config и * .cs. Это намного надежнее, чем использование oft-buggy «Add Service Reference» с Visual Studio.

0 голосов
/ 16 сентября 2008

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

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

Спасибо за совет в любом случае.

0 голосов
/ 16 сентября 2008

Почему-то я предпочитаю использовать svcutil.exe напрямую, чем использовать функцию «Добавить ссылку на службу» в Visual Studio: P Это то, что мы делаем в наших проектах WCF.

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