Пример: создание настраиваемой веб-службы ASP.NET
Дата последнего изменения: 7 июля 2010 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Основные этапы создания веб-службы ASP.NET
Создание веб-службы ASP.NET в Visual Studio
Создание и изменение файлов статического обнаружения и языка WSDL
Развертывание файлов веб-службы в каталог _vti_bin
Внесение новой веб-службы в файл spdisco.aspx
Создание приложения Windows для использования веб-службы
Внедрение объектной модели SharePoint Foundation
В этой задаче программирования представлен обзор создания пользовательской веб-службы, действующей в контексте Microsoft SharePoint Foundation. Рассматривается процесс создания простой веб-службы "Hello World" в Microsoft Visual Studio 2010 и показывается, как можно изменить эту веб-службу для внедрения объектной модели SharePoint Foundation на стороне сервера для возвращения данных сайта и списка.
Важно! |
---|
Настраиваемые веб-службы ASP.NET будут работать в SharePoint Foundation 2010, но рекомендуется вместо них создать настраиваемые службы WCF. Дополнительные сведения о службах WCF см. в разделе Службы WCF в SharePoint Foundation 2010. Пошаговое руководство, показывающее создание настраиваемой службы WCF, см. в разделе Пошаговое руководство по созданию и реализации настраиваемой службы WCF в SharePoint Foundation. |
Основные этапы создания веб-службы ASP.NET
Создание веб-службы Microsoft ASP.NET в Microsoft Visual Studio.
Создание и изменение файла статического обнаружения и файла языка описания веб-служб (WSDL).
Развертывание файлов веб-службы в каталог _vti_bin.
Включение для веб-службы обнаружения ее в списке Spdisco.aspx
Создание клиентского приложения для использования веб-службы.
Создание в веб-службе библиотеки классов, которые определяют программную логику веб-службы.
Создание веб-службы ASP.NET в Visual Studio
Первым этапом является создание веб-сайта веб-службы Microsoft ASP.NET в Visual Studio.
Чтобы создать веб-службу ASP.NET:
В Visual Studio выберите Файл, Создать и Веб-сайт.
В диалоговом окне Создание веб-сайта выберите .NET Framework 3.5 как целевую платформу, выберите Visual Basic или Visual C# как язык программирования в разделе Установленные шаблоны, затем выберите шаблон Веб-служба ASP.NET, затем выберите Файловая система в поле Расположение в Интернете, укажите расположение проекта и нажмите кнопку ОК.
В новом решении веб-службы создайте отдельный проект библиотеки классов для включения в него логики веб-службы. Чтобы создать проект, щелкните Файл, выберите Создать и Проект.
В диалоговом окне Создание проекта раскройте узел Visual Basic или Visual C# в окне Установленные шаблоны, выберите Библиотека классов в качестве шаблона, введите имя и путь для проекта, затем выберите Добавить в решение в поле Решение и нажмите кнопку ОК.
Добавьте ссылку на пространство имен System.Web.Services в проект библиотеки классов. Щелкните правой кнопкой мыши проект в окне Обозреватель решений, щелкните Добавить ссылку, выберите System.Web.Services на вкладке .NET в диалоговом окне Добавить ссылку и нажмите кнопку ОК.
Замените файл классов по умолчанию в проекте библиотеки классов на файл классов службы по умолчанию, который размещен приложением Visual Studio в папке App_Code веб-службы.
Чтобы заменить файл классов на файл классов службы:
В окне Обозреватель решений перетащите файл Service.cs или Service.vb в верхний узел проекта библиотеки классов.
Удалите файлы Class1.cs или Class1.vb и Service.cs или Service.vb, которые оставались в папке App_Code.
Создайте строгое имя библиотеки классов:
В окне Обозреватель решений щелкните правой кнопкой мыши проект библиотеки классов, а затем выберите Свойства.
В диалоговом окне Свойства щелкните Подписывание, выберите Подписать сборку, затем выберите <Создать> в списке Выбрать файл ключа строгого имени.
В диалоговом окне Создать ключ строгого имени введите имя файла для ключа, снимите флажок Защитить мой файл ключа паролем и нажмите кнопку ОК.
Чтобы построить только проект библиотеки классов, щелкните правой кнопкой мыши проект в окне Обозреватель решений, а затем выберите Построить.
Чтобы добавить сборку в глобальный кэш сборок, можно либо перетащить эту сборку в каталог %windows%\assembly с помощью двух окон проводника Windows, либо использовать служебную программу командной строки gacutil.exe, которая входит в состав Microsoft .NET Framework 2.0 SDK.
Чтобы использовать программу gacutil.exe для копирования DLL библиотеки классов в глобальный кэш сборок:
Чтобы открыть командную строку Visual Studio, нажмите кнопку Пуск, выберите Все программы, выберите Microsoft Visual Studio 2010, затем выберите набор средств Visual Studio и щелкните правой кнопкой элемент Командная строка Visual Studio (2010), выберите команду Запуск от имени администратора.
В командной строке введите команду в следующей форме и нажмите клавишу ВВОД.
gacutil.exe -if "<Full file system path to DLL>".
Теперь все готово для изменения данных сборки в файле веб-службы по умолчанию Service.asmx с помощью данных о библиотеке DLL, находящихся в глобальном кэша сборок. Чтобы получить данные из глобального кэша сборок, откройте каталог %windows%\assembly в проводнике Windows, щелкните правой кнопкой мыши сборку, а затем выберите Свойства.
Чтобы открыть файл Service.asmx на странице Обозреватель решений, щелкните правой кнопкой мыши файл, а затем выберите Открыть.
Удалите атрибут CodeBehind из директивы страницы в файле Service.asmx и измените содержимое атрибута Class так, чтобы директива соответствовала следующему формату, в котором имя сборки "MyServiceAssembly" и маркер открытого ключа являются значениями, указанными в диалоговом окне Свойства, открытом на 10-м шаге.
<%@ WebService Language="C#" Class="Service, MyServiceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f2dca3c0f2d0131" %>
В Visual Basic включено пространство имен для определения класса, например Class="MyServiceNamespace.Service, MyServiceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8f2dca3c0f2d0131".
Переименуйте ASMX-файл соответственным образом и сохраните изменения.
Создание и изменение файлов статического обнаружения и языка WSDL
Чтобы обеспечить обнаружение и описание для пользовательской веб-службы, необходимо создать файлы DISCO и WSDL. Так как SharePoint Foundation виртуализирует свои URL-адреса (например, http://MyServer/MySite/MySubsite становится http://MyServer), то использовать автоматически созданные ASP.NET файлы DISCO и WSDL невозможно. Вместо этого необходимо создать ASPX-страницы DISCO и WSDL, которые осуществляют необходимое перенаправление и поддерживают виртуализацию.
Можно использовать ASP.NET для создания файлов DISCO и WSDL, временно разместив веб-службу в виртуальном каталоге, например /_layouts, а затем применить средство обнаружения веб-службы платформы Microsoft .NET Framework (Disco.exe), чтобы получить созданные файлы.
Процедура создания и редактирования файлов статического обнаружения и языка WSDL
В проводнике Windows скопируйте ASMX-файл веб-службы в папку %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS.
Запустите программу Disco.exe в командной строке из каталога LAYOUTS, чтобы создать файлы DISCO и WSDL. Для создания этих файлов в каталоге \LAYOUTS запустите команду в следующем формате:
disco http://MyServer/_layouts/MyCustomWebService.asmx
Чтобы зарегистрировать пространства имен объектной модели SharePoint Foundation, откройте файлы DISCO и WSDL и замените открытие команды обработки XML — <?xml version="1.0" encoding="utf-8"?> — следующими командами.
<%@ Page Language="C#" Inherits="System.Web.UI.Page" %> <%@ Assembly Name="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint.Utilities" %> <%@ Import Namespace="Microsoft.SharePoint" %> <% Response.ContentType = "text/xml"; %>
В файле DISCO измените теги ссылки на контракт и адреса SOAP в соответствии со следующим примером, в котором пути литералов заменяются путями, созданными кодом, с помощью класса Microsoft.SharePoint.Utilities.SPHttpUtility, а также заменяется имя метода, указанное в атрибуте binding.
<contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request) + "?wsdl"),Response.Output); %> docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> xmlns="https://schemas.xmlsoap.org/disco/scl/" /> <soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> xmlns:q1="http://tempuri.org/" binding="q1:HelloWorld" xmlns="https://schemas.xmlsoap.org/disco/soap/" /> <soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> xmlns:q2="http://tempuri.org/" binding="q2:ServiceSoap12" xmlns="https://schemas.xmlsoap.org/disco/soap/" />
В файле WSDL сделайте следующую аналогичную замену для указанного адреса SOAP.
<soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />
Переименуйте файлы MyCustomWebServicedisco.aspx и MyCustomWebServicewsdl.aspx с учетом форматов таким образом, чтобы SharePoint Foundation смог обнаружить службу.
Развертывание файлов веб-службы в каталог _vti_bin
Виртуальный каталог _vti_bin сопоставляется с физическим каталогом %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI, который содержит файлы веб-службы по умолчанию, используемые в SharePoint Foundation. Скопируйте новые файлы MyCustomWebServicewsdl.aspx и MyCustomWebServicedisco.aspx, а также файл MyCustomWebService.asmx, в папку ISAPI.
Из каталога _vti_bin функции веб-службы доступны для сайта, который указывается при добавлении веб-ссылки для службы.
Чтобы проверить, что веб-служба может быть обнаружена, перейдите к http://MyServer/_vti_bin/MyCustomWebService.asmx.
Внесение новой веб-службы в файл spdisco.aspx
Чтобы сделать возможным обнаружение веб-службы в Visual Studio наряду с веб-службами SharePoint Foundation по умолчанию, откройте файл spdisco.aspx, расположенный в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI, и добавьте следующий код, задающий ASMX-файл для веб-службы.
<contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/MyCustomWebService.asmx?wsdl"), Response.Output); %>
docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/MyCustomWebService.asmx"), Response.Output); %>
xmlns=" https://schemas.xmlsoap.org/disco/scl/ " />
<discoveryRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(spWeb.Url + "/_vti_bin/MyCustomWebService.asmx?disco"),Response.Output); %>
xmlns="https://schemas.xmlsoap.org/disco/" />
Создание приложения Windows для использования веб-службы
После копирования файлов веб-службы в папку _vti_bin необходимо создать приложение Windows для использования этой веб-службы.
Процедура создания приложения Windows для использования веб-службы
Откройте Visual Studio, в меню Файл выберите Создать и щелкните Проект.
В диалоговом окне Создать проект выберите Visual C# или Visual Basic, а затем выберите шаблон Приложение Windows Forms.
Введите имя приложения в поле Имя, укажите расположение файлов проекта в поле Расположение и нажмите кнопку ОК.
В окне Обозреватель решений щелкните правой кнопкой мыши проект, а затем выберите Добавить ссылку на службу.
В диалоговом окне Добавление ссылки на службу щелкните Дополнительно и в диалоговом окне Настройка ссылок на службы выберите Добавить веб-ссылку.
В адресной строке браузера Добавление веб-ссылки введите URL-адрес сайта, к которому применяется служба, как показано ниже.
https://Server_Name/[sites/][Site_Name/]_vti_bin/MyCustomWebService.asmx
Затем нажмите клавишу ВВОД.
Щелкните Добавить ссылку, чтобы загрузить контракт службы для веб-службы.
Откройте Form1 в конструкторе, откройте Панель элементов и перетащите кнопку в форму.
Дважды щелкните элемент управления Button1 в Form1, чтобы отобразить файл кода в редакторе кода, и добавьте следующий код, который вызывает пользовательский метод.
Dim MyCustomService As New Web_Reference_Folder.MyServiceClass() MyCustomService.UseDefaultCredentials = True MessageBox.Show(MyCustomService.HelloWorld())
Web_Reference_Folder.MyServiceClass MyCustomService = new Web_Reference_Folder.MyServiceClass(); MyCustomService.UseDefaultCredentials = true; MessageBox.Show(MyCustomService.HelloWorld());
Нажмите клавишу F5, чтобы скомпилировать и запустить проект, и просмотрите окно сообщения, в котором отображается "Hello World"
Внедрение объектной модели SharePoint Foundation
Теперь можно опробовать типы и члены объектной модели SharePoint Foundation в библиотеке классов веб-службы.
Процедура внедрения объектной модели SharePoint Foundation
Добавьте ссылку на сборку Microsoft.SharePoint. Щелкните правой кнопкой мыши проект библиотеки классов в окне Обозреватель решений, выберите Добавить ссылку, выберите SharePoint Foundation и нажмите кнопку ОК.
В файл проекта Service.cs или Service.vb необходимо импортировать пространства имен, соответствующие объектной модели. Например, чтобы использовать типы и члены пространств имен Microsoft.SharePoint и Microsoft.SharePoint.Utilities, добавьте следующие директивы.
Imports Microsoft.SharePoint Imports Microsoft.SharePoint.Utilities
using Microsoft.SharePoint; using Microsoft.SharePoint.Utilities;
Переименуйте метод в файле Service.cs или Service.vb. Например, измените имя с HelloWorld на GetSiteListCount.
Добавьте следующий код для отображения имени веб-сайта и числа списков, которые он содержит.
Dim myWebSite As SPWeb = SPContext.Current.Web Dim lists As SPListCollection = myWebSite.Lists Return myWebSite.Title + " contains " + lists.Count.ToString() + " lists."
SPWeb myWebSite = SPContext.Current.Web; SPListCollection lists = myWebSite.Lists; return (myWebSite.Title + " contains " + lists.Count.ToString() + " lists.");
Примечание Если код изменяет данные SharePoint Foundation во время запроса HttpGet, то может понадобиться разрешить небезопасные обновления на веб-сайте. Это можно сделать настройкой свойства AllowUnsafeUpdates.
Чтобы перестроить DLL-библиотеку классов и скопировать ее в глобальный кэш сборок, повторите шаги 8 и 9 в разделе "Создание веб-службы ASP.NET".
Перезапустите службы IIS, чтобы изменения в библиотеке DLL вступили в силу.
Чтобы создать новые версии DISCO- и WSDL-файлов, повторите шаги раздела "Создание файлов статического обнаружения и языка WSDL", но измените соответствующее имя метода привязки в DISCO-файле, например на GetSiteListCount.
Скопируйте новые версии файлов MyCustomWebServicedisco.aspx и MyCustomWebServicewsdl.aspx в папку ISAPI.
Откройте приложение Windows, созданное ранее, удалите старую ссылку на веб-службу для примера Hello World, соответственно измените имя метода и добавьте новую веб-ссылку в измененную веб-службу.
Нажмите клавишу F5, чтобы скомпилировать и запустить проект, и просмотрите окно сообщения, в котором отображается имя веб-сайта и число списков, которые он содержит.