есть ли в любом случае динамическая ссылка на веб-сервис? - PullRequest
2 голосов
/ 19 декабря 2010

Моя цель - подключиться к списку sharepoint и загрузить данные в таблицу данных.Я могу сделать это хорошо, но очень «жестко», потому что мне нужно вручную, внутри Visual Studio, добавить в проект веб-ссылку.Например, если я хочу указать что-то вроде этого:

http://www.ab.com/sites/SiteCollections/MyTeam/_vti_bin/dspsts.asmx
или
http://www.abc.com/sites/MyTeam/_vti_bin/Lists.asmx

(просто фиктивный URL, чтобы показать формат).

Мне нужно создать ссылку на веб-сервис в Visual studio.Это генерирует кучу кода (Reference.cs) и создает раздел веб-ссылок в моем проекте и в app.config, и теперь я могу использовать этот код:

  com.mysite.Lists lists = new Lists();
  lists.Credentials = new System.Net.NetworkCredential(user, pwd, "CORP");
  lists.Url = "http://www.abc.com/sites/MyTeam/_vti_bin/Lists.asmx";

  XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
  XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
  XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

  XmlNode listitems = lists.GetListItems(sharepointList, null, ndQuery, ndViewFields, "1000",
                                               ndQueryOptions, null);

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

Я хочу превратить этот код в библиотеку, чтобы люди могли просто взять URL-адрес и передать его. Забавная вещьв том, что если вы посмотрите выше, это свойство URL (так что вы думаете, что оно будет работать), но оно, похоже, не будет работать, пока не будут настроены все остальные настройки и ссылки.Есть ли способ сделать это, не требуя весь этот автоматически генерируемый код, управляемый конфигурацией Visual Studio?

Ответы [ 4 ]

6 голосов
/ 26 декабря 2010

Если ваша проблема в том, что вам нужна новая справочная служба для каждого списка, значит, она уже решена.Пока все службы List.asmx имеют одинаковый WSDL, вам не требуется новая ссылка на службу для каждого из них.Вы можете использовать одну ссылку на службу и просто использовать перегрузку конструктора, которая принимает адрес конечной точки (URL).

0 голосов
/ 01 января 2011

Я столкнулся с подобной ситуацией, чтобы вызвать веб-сервис SharePoint и получить данные для другого списка на основе выбранного сайта.

Мой подход состоял в том, чтобы хранить URL сайта и учетные данные в файле XML. Как только он у вас есть, вы можете динамически передавать URL-адрес сайта, как показано ниже.

Вы можете создать одну функцию и передать необходимые параметры, такие как SiteURL, DocLibName, ListID и т. Д.

function GetListData(String SiteURL, string DocLibName, string ListId)
com.mysite.Lists lists = new Lists()
{

lists.Credentials = new System.Net.NetworkCredential(user, pwd, "CORP");

lists.Url = SiteURL +/_vti_bin/Lists.asmx";
XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "");
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "");
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");

XmlNode listitems = lists.GetListItems(DocLibName, null, ndQuery, ndViewFields, "1000",
                                               ndQueryOptions, null);

}

Как только вы получите его в XMLNode, вы можете взять его в наборе данных.

DataSet dsXML=new DataSet(); 
dsXML.LoadXml(node.OuterXml);

Надеюсь, это будет полезно.

Дайте мне знать, если у вас есть какие-либо вопросы.

0 голосов
/ 27 декабря 2010

Самый низкоуровневый способ создания динамического клиента - это новый ChannelFactory (). CreateChannel (связывание, адрес), создание объектов сообщения из XML, вызов метода Request () на канале, а затем обработка возвращенного сообщения XML. Если вы можете дополнительно указать, что не является динамическим в веб-сервисах, которые вы вызываете, то это может стать намного проще. На самом деле, есть ли что-нибудь динамическое в Lists.asmx сайта Sharepoint? Я имею в виду, методы или типы данных варьируются в зависимости от установки?

0 голосов
/ 19 декабря 2010

Вы можете взглянуть на эту интересную статью от Microsoft Мишель Леру Бустаманте: Создание маршрутизатора WCF, часть 1

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

Есть также эта статья Мигеля Кастро: WCF Ручной Путь… Правильный Путь

Трудная дорога впереди, удачи:)

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