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


Как определить контракт службы Windows Communication Foundation

Это первая из шести задач, выполнение которых необходимо для создания базовой службы Windows Communication Foundation (WCF) и клиента, который может вызывать эту службу. Общие сведения обо всех шести задачах см. в разделе Учебник по началу работы.

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

Код, используемый для выполнения этой задачи, приведен в примере после описания процедуры.

Создание контракта Windows Communication Foundation с помощью интерфейса

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

  2. Создайте новый проект консольного приложения. В меню Файл выберите пункт Создать, а затем Проект. В диалоговом окне Создать проект выберите Visual Basic или Visual C#, выберите шаблон Консольное приложение и назовите его Service. Используйте Расположение по умолчанию.

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

  4. Измените пространство имен Service по умолчанию на Microsoft.ServiceModel.Samples. Для этого щелкните проект правой кнопкой мыши в Обозревателе решений и выберите Свойства. Убедитесь, что выбрана вкладка Приложение на левой стороне диалогового окна Свойства. Для проекта C# введите Microsoft.ServiceModel.Samples в поле ввода с меткой Пространство имен по умолчанию. Для проекта VB введите Microsoft.ServiceModel.Samples в поле ввода с меткой Корневое пространство имен. Нажмите меню Файл и выберите Сохранить все, чтобы сохранить изменения.

  5. Если используется C#, измените пространство имен в созданном файле Program.cs на Microsoft.ServiceModel.Samples, как показано в следующем примере.

    namespace Microsoft.ServiceModel.Samples 
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
    

    Если используется VB, добавьте инструкции Namespace и End Namespace к созданному файлу Module1.vb, как показано в следующем примере.

    Namespace Microsoft.ServiceModel.Samples
        Module Module1
            Sub Main()
            End Sub
        End Module
    End Namespace
    
  6. Добавьте в проект ссылку на System.ServiceModel.dll.

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

    2. Перейдите на вкладку .NET диалогового окна Добавление ссылки и воспользуйтесь прокруткой для перехода вниз, пока не отобразится System.ServiceModel (версия 4.0.0.0), выберите его и нажмите ОК.

    ms731835.note(ru-ru,VS.100).gifПримечание
    При использовании компилятора командной строки (например, Csc.exe или Vbc.exe) необходимо указать путь к сборкам. По умолчанию на компьютере под управлением Windows Vista используется путь Windows\Microsoft.NET\Framework\v4.0.

  7. Добавьте оператор using (Imports в Visual Basic) для пространства имен System.ServiceModel.

    Imports System.ServiceModel
    
    using System.ServiceModel;
    
  8. Определите новый интерфейс с именем ICalculator и примените к интерфейсу атрибут ServiceContractAttribute со значением Namespace, равным «http://Microsoft.ServiceModel.Samples». Рекомендуется явно указывать пространство имен, так как это исключает добавление значения пространства имен по умолчанию к имени контракта.

    ms731835.note(ru-ru,VS.100).gifПримечание
    При использовании атрибутов для аннотирования интерфейса или класса в имени атрибута можно опускать часть "Attribute". Таким образом, ServiceContractAttribute изменится на [ServiceContract] в C# или на <ServiceContract> в Visual Basic.

    <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
    Public Interface ICalculator
    
    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
    public interface ICalculator
    
  9. Определите метод для каждой из операций, предоставляемой контрактом ICalculator (добавить, вычесть, умножить и поделить) в интерфейсе, и примените атрибут OperationContractAttribute к каждому методу, который требуется предоставить как часть открытого контракта WCF.

        <OperationContract()> _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
    

Пример

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

Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel

Namespace Microsoft.ServiceModel.Samples
    ' Step 6: Define a service contract.
    <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
    Public Interface ICalculator
        <OperationContract()> _
    Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
        <OperationContract()> _
        Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
    End Interface
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
  // Step 6: Define a service contract.
  [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
  public interface ICalculator
  {
    // Step7: Create the method declaration for the contract.
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
  }
}

После выполненного создания интерфейса перейдите к Как реализовать контракт службы Windows Communication Foundation, чтобы создать интерфейс. Сведения по устранению неполадок см. в разделе Устранение неполадок, связанных с учебником по началу работы.

См. также

Задачи

Как реализовать контракт службы Windows Communication Foundation
Образец для начала работы
Резидентное размещение

Справочник

ServiceContractAttribute
OperationContractAttribute