Экспорт (0) Печать
Развернуть все

Шаг 2. Определение контракта службы WCF на основе REST, используемого с Service Bus

Обновлено: Июнь 2014 г.

Это вторая из четырех задач, необходимых для создания простой службы в стиле REST для Служебная шина. Обзор всех четырех задач см. в разделе Учебник по REST в Service Bus.

Как и в случае с другими службами Служебная шина, при создании службы в стиле REST необходимо определить контракт. В контракте указано, какие операции поддерживает узел. Операция службы может восприниматься как метод веб-службы. Контракты создаются с помощью определения интерфейса C++, C# или Visual Basic. Каждый метод в интерфейсе соответствует определенной операции службы. Атрибут ServiceContractAttribute должен применяться к каждому интерфейсу, а атрибут OperationContractAttribute — к каждой операции. Если метод в интерфейсе, который имеет атрибут ServiceContractAttribute, не имеет атрибута OperationContractAttribute, то этот метод не предоставляется. Код, используемый для выполнения этих задач, приведен в примере после описания данной процедуры.

Основное различие между базовым контрактом Служебная шина и контрактом в стиле REST заключается в добавлении свойства к OperationContractAttribute: WebGetAttribute. Это свойство позволяет вам сопоставить метод в интерфейсе с методом на другой стороне интерфейса. В данном случае мы используем WebGetAttribute для связывания метода с HTTP GET. Это позволяет Служебная шина точно извлекать и интерпретировать команды, отправляемые в интерфейс.

Оценка времени выполнения: 10 минут.

  1. Откройте Visual Studio от имени администратора, щелкнув программу правой кнопкой мыши в меню Пуск и выбрав пункт Запуск от имени администратора.

  2. Создайте новый проект консольного приложения. Щелкните меню Файл и выберите пункты Создать и Проект. В диалоговом окне Новый проект выберите Visual C# (если элемент Visual C# не отображается, откройте список Другие языки), выберите шаблон Консольное приложение и назовите его ImageListener. Используйте Расположение по умолчанию. Нажмите кнопку ОК, чтобы создать проект.

  3. Для проекта C# Visual Studio создает файл с именем Program.cs. Этот класс содержит пустой метод Main(), который требуется для правильного построения проекта консольного приложения. Таким образом, вы можете оставить его в проекте.

  4. Добавьте в проект ссылку на System.ServiceModel.dll:

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

    2. Выберите вкладку .NET в диалоговом окне Добавление ссылки, выполните прокрутку вниз до элемента System.ServiceModel и выберите его. Нажмите кнопку ОК.

    noteПримечание
    При использовании командной строки (например, Csc.exe) необходимо также предоставить путь к сборкам. По умолчанию на компьютере, работающем, например, под управлением , этот путь имеет следующее значение: Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation.

  5. Повторите предыдущее действие, чтобы добавить ссылку на сборку System.ServiceModel.Web.dll.

  6. Добавьте оператор using для пространств имен System.ServiceModel, System.ServiceModel.Channels, System.ServiceModel.Web и System.IO.

    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Web;
    using System.IO;
    
    

    System.ServiceModel является пространством имен, которое позволяет программно получить доступ к основным функциям Windows Communication Foundation (WCF). Служебная шина использует множество объектов и атрибутов WCF для определения контрактов службы. Вы будете использовать это пространство имен в большинстве своих приложений Служебная шина. Аналогичным образом, System.ServiceModel.Channels помогает определить канал, представляющий собой объект, посредством которого вы взаимодействуете с Служебная шина и клиентским веб-браузером. Наконец, System.ServiceModel.Web содержит типы, которые позволяют вам создавать веб-приложения.

  7. Переименуйте пространство имен для программы, изменив используемое по умолчанию имя Visual Studio на имя Microsoft.ServiceBus.Samples.

    namespace Microsoft.ServiceBus.Samples
    {
    ...
    
    
  8. Непосредственно после объявления пространства имен определите новый интерфейс с именем IImageContract и примените к нему атрибут ServiceContractAttribute со значением http://samples.microsoft.com/ServiceModel/Relay/. Это значение пространства имен отличается от пространства имен, которое вы используете в рамках всего кода. Это значение пространства имен используется в качестве уникального идентификатора для данного контракта и должно содержать сведения об управлении версиями. Дополнительные сведения см. в разделе, см. раздел Управление версиями службы. Явное указание пространства имен позволяет предотвратить добавление значения пространства имен по умолчанию к имени контракта.

    [ServiceContract(Name = "ImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/RESTTutorial1")]
    public interface IImageContract
    {
    }
    
    
  9. Внутри интерфейса IImageContract объявите метод для отдельной операции, предоставляемой контрактом IImageContract в интерфейсе, и примените атрибут OperationContractAttribute к методу, который вы хотите предоставить в рамках общедоступного контракта Служебная шина.

    public interface IImageContract
    {
        [OperationContract]
        Stream GetImage();
    }
    
  10. Рядом с атрибутом OperationContract примените атрибут WebGet.

    
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    

    Это позволяет Служебная шина перенаправлять HTTP-запросы GET на GetImage и преобразовывать возвращаемые значения GetImage в HTTP-запрос GETRESPONSE. Позднее в данном учебнике мы воспользуемся веб-браузером для доступа к этому методу и для отображения изображения в браузере.

  11. Прямо под определением IImageContract объявите канал, который наследует как от интерфейса IImageContract, так и от интерфейса IClientChannel.

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }
    
    public interface IImageChannel : IImageContract, IClientChannel { }
    

    Канал является объектом WCF, посредством которого служба и клиент обмениваются информацией. Позже вы создадите канал в размещенном приложении. После этого Служебная шина использует канал для передачи HTTP-запросов GET из браузера в реализацию GetImage. Служебная шина также использует канал для получения возвращаемого значения GetImage и перевода его в HTTP-запрос GETRESPONSE для браузера клиента.

  12. В меню Построение выберите команду Построить решение, чтобы подтвердить правильность выполненной работы.

Пример

В следующем примере кода показан базовый интерфейс, определяющий контракт Служебная шина.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Web;
using System.IO;

namespace Microsoft.ServiceBus.Samples
{

    [ServiceContract(Name = "IImageContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IImageContract
    {
        [OperationContract, WebGet]
        Stream GetImage();
    }

    public interface IImageChannel : IImageContract, IClientChannel { }

    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

После создания интерфейса переходите к Шаг 3. Реализация контракта службы WCF на основе REST, используемого с Service Bus для внедрения интерфейса.

См. также

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

Вы хотите принять участие?
Показ:
© 2014 Microsoft