Есть ли способ вызвать «Update Service Reference», не меняя App.Config? - PullRequest
2 голосов
/ 10 ноября 2011

Хорошо, я управляю своим собственным App.Config. Мне не нужен волшебник, чтобы сделать это для меня, большое спасибо. И код, который он помещает в мой App.Config, является многословным мусором. Я способен писать свои собственные конечные точки и привязки WCF. Я просто хочу, чтобы Visual Studio 2010 делал то, что у него лучше всего: генерацию кода. Просто дайте мне код сервера и данных! Есть ли способ отключить это? Есть ли способ вызвать 'Update Service Reference' без изменения VS. AppfConig? Это очень расстраивает. Теперь это дает мне исключение, если я полностью не удаляю все узлы конечных точек из моего App.Config.

Это исключение, которое я получаю:

Произошла ошибка при загрузке «http://localhost:8732/MyService/mex'.

Запрос не выполнен с состоянием HTTP 400: неверный запрос.

Дочерний элемент с именем «конечная точка» с тем же ключом уже существует в та же область конфигурации. Элементы коллекции должны быть уникальными в пределах та же область конфигурации (например, тот же файл application.config). Дубликат значения ключа: 'ContractType: Web.DataService.MyService.IMyService; имя: MyService.Live. (C: \ ProjectPath \ App.config строка 152)

А вот и мой App.Config:

<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="Binding.Debug" maxReceivedMessageSize="2147483647">
            </binding>
            <binding name="Binding.Secure" maxReceivedMessageSize="2147483647">
                <security mode="Transport">
                    <transport clientCredentialType="None"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <!-- Debug client endpoints -->

        <endpoint name="MyService.Debug"
                  contract="Web.DataService.MyService.IMyService" 
                  address="http://localhost:8732/MyService"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Debug"
                  />
        <endpoint name="MyService1.Debug"
                  contract="Web.DataService.MyService1.IMyService1" 
                  address="http://localhost:8732/MyService1"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Debug"
                  />
        <endpoint name="MyService2.Debug"
                  contract="Web.DataService.MyService2.IMyService2"
                  address="http://localhost:8732/MyService2"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Debug"
                  />
        <endpoint name="MyService3.Debug"
                  contract="Web.DataService.MyService3.IMyService3"
                  address="http://localhost:8732/MyService3"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Debug"
                  />

        <!-- Local client endpoints -->

        <endpoint name="MyService.Local"
                  contract="Web.DataService.MyService.IMyService" 
                  address="https://www.mydomain.com/MyVirtualDirectory.Local/MyService.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService1.Local"
                  contract="Web.DataService.MyService1.IMyService1" 
                  address="https://www.mydomain.com/MyVirtualDirectory.Local/MyService1.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService2.Local"
                  contract="Web.DataService.MyService2.IMyService2"
                  address="https://www.mydomain.com/MyVirtualDirectory.Local/MyService2.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService3.Local"
                  contract="Web.DataService.MyService3.IMyService3"
                  address="https://www.mydomain.com/MyVirtualDirectory.Local/MyService3.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />

        <!-- Beta client endpoints -->

        <endpoint name="MyService.Beta"
                  contract="Web.DataService.MyService.IMyService"
                  address="https://www.mydomain.com/MyVirtualDirectory.Beta/MyService.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService1.Beta"
                  contract="Web.DataService.MyService1.IMyService1"
                  address="https://www.mydomain.com/MyVirtualDirectory.Beta/MyService1.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService2.Beta"
                  contract="Web.DataService.MyService2.IMyService2"
                  address="https://www.mydomain.com/MyVirtualDirectory.Beta/MyService2.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService3.Beta"
                  contract="Web.DataService.MyService3.IMyService3"
                  address="https://www.mydomain.com/MyVirtualDirectory.Beta/MyService3.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />

        <!-- Live client endpoints -->

        <endpoint name="MyService.Live"
                  contract="Web.DataService.MyService.IMyService"
                  address="https://www.mydomain.com/MyVirtualDirectory/MyService.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService1.Live"
                  contract="Web.DataService.MyService1.IMyService1"
                  address="https://www.mydomain.com/MyVirtualDirectory/MyService1.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService2.Live"
                  contract="Web.DataService.MyService2.IMyService2"
                  address="https://www.mydomain.com/MyVirtualDirectory/MyService2.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
        <endpoint name="MyService3.Live"
                  contract="Web.DataService.MyService3.IMyService3"
                  address="https://www.mydomain.com/MyVirtualDirectory/MyService3.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="Binding.Secure"
                  />
    </client>
</system.serviceModel>

Это очень расстраивает!

редактирует:

Я выяснил, какое исключение я получил. У меня был MyService2.Live дважды. Я исправил это и больше не получал исключения. Я все еще хотел бы знать, могу ли я помешать VS10 изменить мой App.Config.

Ответы [ 2 ]

1 голос
/ 03 августа 2013

Мои решения для этой проблемы («Обновление справочной службы» занимает 2 секунды ... svcutil с ручной вставкой копии занимает 30 секунд и слишком много alt-вкладок):

  • Если вы работаете с системой контроля версий (например, TFS) ... проверьте приложение или web.config перед обновлением. Затем запустите «Обновить справочную службу». Это автоматически проверит файл конфигурации. После обновления просто «Отменить извлечение» из системы контроля версий должно вернуть исходный, но сгенерированный ссылочный код будет обновлен.
  • Если нет управления исходным кодом: откройте приложение или файл web.config, выберите весь текст (ctrl + a), скопируйте (ctrl + c), обновите справочную службу, снова выделите весь текст в файле конфигурации (ctrl + a ), вставить (ctrl + v).

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

Sidenote: если вы добавляете сервис, вам нужно вручную добавить правильные привязки и конечные точки для вашего нового сервиса курса.

1 голос
/ 10 ноября 2011

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

p.s: используйте slsvcutil , если ваш клиент Silverlight

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