Поделиться через


Пример: создание настраиваемой веб-службы 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:

  1. В Visual Studio выберите Файл, Создать и Веб-сайт.

  2. В диалоговом окне Создание веб-сайта выберите .NET Framework 3.5 как целевую платформу, выберите Visual Basic или Visual C# как язык программирования в разделе Установленные шаблоны, затем выберите шаблон Веб-служба ASP.NET, затем выберите Файловая система в поле Расположение в Интернете, укажите расположение проекта и нажмите кнопку ОК.

  3. В новом решении веб-службы создайте отдельный проект библиотеки классов для включения в него логики веб-службы. Чтобы создать проект, щелкните Файл, выберите Создать и Проект.

  4. В диалоговом окне Создание проекта раскройте узел Visual Basic или Visual C# в окне Установленные шаблоны, выберите Библиотека классов в качестве шаблона, введите имя и путь для проекта, затем выберите Добавить в решение в поле Решение и нажмите кнопку ОК.

  5. Добавьте ссылку на пространство имен System.Web.Services в проект библиотеки классов. Щелкните правой кнопкой мыши проект в окне Обозреватель решений, щелкните Добавить ссылку, выберите System.Web.Services на вкладке .NET в диалоговом окне Добавить ссылку и нажмите кнопку ОК.

  6. Замените файл классов по умолчанию в проекте библиотеки классов на файл классов службы по умолчанию, который размещен приложением Visual Studio в папке App_Code веб-службы.

    Чтобы заменить файл классов на файл классов службы:

    1. В окне Обозреватель решений перетащите файл Service.cs или Service.vb в верхний узел проекта библиотеки классов.

    2. Удалите файлы Class1.cs или Class1.vb и Service.cs или Service.vb, которые оставались в папке App_Code.

  7. Создайте строгое имя библиотеки классов:

    1. В окне Обозреватель решений щелкните правой кнопкой мыши проект библиотеки классов, а затем выберите Свойства.

    2. В диалоговом окне Свойства щелкните Подписывание, выберите Подписать сборку, затем выберите <Создать> в списке Выбрать файл ключа строгого имени.

    3. В диалоговом окне Создать ключ строгого имени введите имя файла для ключа, снимите флажок Защитить мой файл ключа паролем и нажмите кнопку ОК.

  8. Чтобы построить только проект библиотеки классов, щелкните правой кнопкой мыши проект в окне Обозреватель решений, а затем выберите Построить.

  9. Чтобы добавить сборку в глобальный кэш сборок, можно либо перетащить эту сборку в каталог %windows%\assembly с помощью двух окон проводника Windows, либо использовать служебную программу командной строки gacutil.exe, которая входит в состав Microsoft .NET Framework 2.0 SDK.

    Чтобы использовать программу gacutil.exe для копирования DLL библиотеки классов в глобальный кэш сборок:

    1. Чтобы открыть командную строку Visual Studio, нажмите кнопку Пуск, выберите Все программы, выберите Microsoft Visual Studio 2010, затем выберите набор средств Visual Studio и щелкните правой кнопкой элемент Командная строка Visual Studio (2010), выберите команду Запуск от имени администратора.

    2. В командной строке введите команду в следующей форме и нажмите клавишу ВВОД.

      gacutil.exe -if "<Full file system path to DLL>".

  10. Теперь все готово для изменения данных сборки в файле веб-службы по умолчанию Service.asmx с помощью данных о библиотеке DLL, находящихся в глобальном кэша сборок. Чтобы получить данные из глобального кэша сборок, откройте каталог %windows%\assembly в проводнике Windows, щелкните правой кнопкой мыши сборку, а затем выберите Свойства.

  11. Чтобы открыть файл Service.asmx на странице Обозреватель решений, щелкните правой кнопкой мыши файл, а затем выберите Открыть.

  12. Удалите атрибут 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".

  13. Переименуйте 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

  1. В проводнике Windows скопируйте ASMX-файл веб-службы в папку %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS.

  2. Запустите программу Disco.exe в командной строке из каталога LAYOUTS, чтобы создать файлы DISCO и WSDL. Для создания этих файлов в каталоге \LAYOUTS запустите команду в следующем формате:

    disco http://MyServer/_layouts/MyCustomWebService.asmx

  3. Чтобы зарегистрировать пространства имен объектной модели 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"; %>
    
  4. В файле 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/" />
    
  5. В файле WSDL сделайте следующую аналогичную замену для указанного адреса SOAP.

    <soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />
    
  6. Переименуйте файлы 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 для использования веб-службы

  1. Откройте Visual Studio, в меню Файл выберите Создать и щелкните Проект.

  2. В диалоговом окне Создать проект выберите Visual C# или Visual Basic, а затем выберите шаблон Приложение Windows Forms.

  3. Введите имя приложения в поле Имя, укажите расположение файлов проекта в поле Расположение и нажмите кнопку ОК.

  4. В окне Обозреватель решений щелкните правой кнопкой мыши проект, а затем выберите Добавить ссылку на службу.

  5. В диалоговом окне Добавление ссылки на службу щелкните Дополнительно и в диалоговом окне Настройка ссылок на службы выберите Добавить веб-ссылку.

  6. В адресной строке браузера Добавление веб-ссылки введите URL-адрес сайта, к которому применяется служба, как показано ниже.

    https://Server_Name/[sites/][Site_Name/]_vti_bin/MyCustomWebService.asmx

    Затем нажмите клавишу ВВОД.

  7. Щелкните Добавить ссылку, чтобы загрузить контракт службы для веб-службы.

  8. Откройте Form1 в конструкторе, откройте Панель элементов и перетащите кнопку в форму.

  9. Дважды щелкните элемент управления 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());
    
  10. Нажмите клавишу F5, чтобы скомпилировать и запустить проект, и просмотрите окно сообщения, в котором отображается "Hello World"

Внедрение объектной модели SharePoint Foundation

Теперь можно опробовать типы и члены объектной модели SharePoint Foundation в библиотеке классов веб-службы.

Процедура внедрения объектной модели SharePoint Foundation

  1. Добавьте ссылку на сборку Microsoft.SharePoint. Щелкните правой кнопкой мыши проект библиотеки классов в окне Обозреватель решений, выберите Добавить ссылку, выберите SharePoint Foundation и нажмите кнопку ОК.

  2. В файл проекта Service.cs или Service.vb необходимо импортировать пространства имен, соответствующие объектной модели. Например, чтобы использовать типы и члены пространств имен Microsoft.SharePoint и Microsoft.SharePoint.Utilities, добавьте следующие директивы.

    Imports Microsoft.SharePoint
    Imports Microsoft.SharePoint.Utilities
    
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Utilities;
    
  3. Переименуйте метод в файле Service.cs или Service.vb. Например, измените имя с HelloWorld на GetSiteListCount.

  4. Добавьте следующий код для отображения имени веб-сайта и числа списков, которые он содержит.

    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.

  5. Чтобы перестроить DLL-библиотеку классов и скопировать ее в глобальный кэш сборок, повторите шаги 8 и 9 в разделе "Создание веб-службы ASP.NET".

  6. Перезапустите службы IIS, чтобы изменения в библиотеке DLL вступили в силу.

  7. Чтобы создать новые версии DISCO- и WSDL-файлов, повторите шаги раздела "Создание файлов статического обнаружения и языка WSDL", но измените соответствующее имя метода привязки в DISCO-файле, например на GetSiteListCount.

  8. Скопируйте новые версии файлов MyCustomWebServicedisco.aspx и MyCustomWebServicewsdl.aspx в папку ISAPI.

  9. Откройте приложение Windows, созданное ранее, удалите старую ссылку на веб-службу для примера Hello World, соответственно измените имя метода и добавьте новую веб-ссылку в измененную веб-службу.

  10. Нажмите клавишу F5, чтобы скомпилировать и запустить проект, и просмотрите окно сообщения, в котором отображается имя веб-сайта и число списков, которые он содержит.