Динамически задать URL-адрес веб-службы
сценарий: я запускаю код на клиенте, который подключается к серверу и использует веб-сервис для получения данных о списке SharePoint. Я использую Visual Studio 2010 "Service reference" для получения веб-службы для моего сайта SP и получения моих данных из списка. Это работает. Теперь, как я могу кодировать его так, чтобы, когда я хочу перейти от теста к производству, мои вызовы веб-службы все еще будут работать? Обратите внимание, что веб-служба является веб-службой SharePoint, я ее не писал. Я только использую его. Есть что я предлагаю возможно? У меня есть возможность убедиться, что сайт точно такой же (за исключением URL-адресов) в обеих средах (например, резервное копирование сайта SP и его запуск). Спасибо за любые предложения.
резюме:
в основном я ищу лучший способ перейти от теста к производству без повторной компиляции моего кода, который потребляет веб-службу SP. Кроме того, в качестве примечания, если кто-нибудь знает, насколько похожи тестовые / производственные сайты sharepoint быть, [для того, чтобы веб-служба работала над обоими, не изменяя ничего, кроме URL-адреса].. это была бы полезная информация.
решение
файл конфигурации проекта можно использовать для указания расположения веб-службы. Этот.svcdatamap и другие файлы в проекте VS предназначены только для использования во время разработки, а URL-адрес, который фактически используется для подключения к веб-службе SharePoint, передается в качестве аргумента
4 ответов
насколько я знаю, инструменты Visual Studio для офисных проектов позволяют вам иметь приложение.конфигурационный файл в вашем проекте. Я ожидал, что Visual Studio создала приложение.конфигурационный файл и добавлены необходимые параметры конфигурации, связанные со ссылкой на веб-службу. В любом случае, вам нужно сохранить правильный url веб - службы где-нибудь-приложение.config, реестр или даже база данных.
Если вы не можете сохранить информацию об адресе конечной точки веб-службы в приложении.конфигурационный файл, есть способ настроить прокси вручную.
-
Если это .ссылка asmx добавлена как устаревшая "веб-ссылка" в Visual Studio, тогда все, что вам нужно сделать, это установить значение свойства Url прокси-объекта перед вызовом любых методов веб-службы. Например:
MyASMXWebService proxy = new MyASMXWebService(); proxy.Url = "web service url"; proxy.HelloWorld();
-
Если это .ВПВ ссылки на службу WCF, то все становится немного сложнее. Конечную точку веб-службы необходимо создать программным способом. Для пример:
BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress endpoint = new EndpointAddress("web service url"); ChannelFactory<IMyWCFWebService> factory = new ChannelFactory<IMyWCFWebService>(binding, endpoint); IMyWCFWebService proxy = factory.CreateChannel(); proxy.DoWork();
поскольку службы SharePoint services (SVC) не предоставляют прокси-сервер, вариант 2 не будет работать. Ссылки на оба местоположения должны быть включены в приложение, а затем использовать parm для отличия производства от тестирования. Я считаю, что 2013 скорее исправить эту ошибку.
простой пример SharePoint:
MyService.ListsSoapClient client = new MyService.ListsSoapClient();
client.Endpoint.Address = "site url"+"/_vti_bin/lists.asmx";