Обновление веб-ссылки в Visual Studio - PullRequest
3 голосов
/ 09 марта 2010

Я унаследовал проект веб-сайта, который использует несколько веб-служб WCF, размещенных на сервере BizTalk. У нас есть две среды, в которых мне нужно развернуть этот проект, с разными URL-адресами для разных серверов BizTalk.

т.е. В промежуточной среде мне нужно указать сервисы на xx.xx.xx.101
В среде Live мне нужно указать их на xx.xx.xx.102 или на что угодно.

В настоящее время у нас есть все URL-адреса, хранящиеся в ключах в файле web.config, чтобы мы могли их динамически изменять. К сожалению, это не работает.

Если я изменю URL-адрес в файле web.config на что-то отличное от того, с чем был скомпилирован проект, я получаю сообщение об ошибке при вызове службы:

Сервер не распознал значение заголовка HTTP SOAPAction: xx.xx.xx.101 \ ServiceName \ MethodName

Мне сказали, что единственный известный им способ развертывания - это обновить URL-адреса web.config, изменить все веб-ссылки в Visual Studio для соответствия, нажать «Обновить веб-ссылку» для каждой ссылки в Visual Studio, а затем скомпилировать.

Я написал предварительно созданный сценарий NAnt для прохождения и замены всех экземпляров URL, найденных в любом месте в каталоге проекта, и даже это не имеет никакого значения.

Когда я нажимаю "Обновить ссылку", из службы должно быть что-то еще, но я не уверен, что.

У кого-нибудь есть идеи? Есть ли способ сделать это программно?

Ответы [ 3 ]

3 голосов
/ 09 марта 2010

Являются ли указанные веб-сервисы одинаковыми на разных серверах, кроме URL? Особенно пространство имен должно быть одинаковым для всех указанных служб.

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

YourServiceReference yourService = new YourServiceReference();
yourService.Url = "http://yourconfigendpoint";

РЕДАКТИРОВАТЬ: Это для веб-сервисов старого стиля, не сомневаюсь в WCF, но должно быть похоже ..?

0 голосов
/ 09 марта 2010

Правильно ... Думаю, я это исправил!

Я отказался от всех веб-ссылок Visual Studio в пользу прокси-классов, сгенерированных задачей «wsdl» NAntContrib.

Теперь скрипт обновит все ссылки в зависимости от того, какой тип сборки вы выбрали (Debug, Release и т. Д.).

Это все еще не отвечает , почему проблема возникла в первую очередь, но я подозреваю, что это так, как предложил Mattanja, и в каждом веб-сервисе есть некоторые различия.

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

0 голосов
/ 09 марта 2010

Нейлд! Я думаю, что полная замена URL в проекте - не лучшее решение. Я думаю, что вызовы службы WCF в веб-проекте заключили контракты на передачу сообщений. Можете ли вы разместить здесь фрагмент кода вызова некоторого метода службы. Вы должны заменить только URL, который присутствует в прокси-конструкторе. Другие URL, которые указывают имя метода, должны оставаться неизменными

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