Как определить контракт службы Windows Communication Foundation
Это первая из шести задач, выполнение которых необходимо для создания базовой службы Windows Communication Foundation (WCF) и клиента, который может вызывать эту службу. Общие сведения обо всех шести задачах см. в разделе Учебник по началу работы.
При создании базовой службы WCF первая задача — это определение контракта. Контракт указывает, какие операции поддерживаются службой. Операцию можно представлять себе как метод веб-службы. Контракты создаются путем определения интерфейса C++, C# или Visual Basic. Каждый метод в интерфейсе соответствует определенной операции службы. К каждому интерфейсу должен быть применен атрибут ServiceContractAttribute, и к каждой операции должен быть применен атрибут OperationContractAttribute. Если к методу в интерфейсе применен атрибут ServiceContractAttribute, но не применен атрибут OperationContractAttribute, этот метод не виден для использования.
Код, используемый для выполнения этой задачи, приведен в примере после описания процедуры.
Создание контракта Windows Communication Foundation с помощью интерфейса
Откройте Visual Studio 2010 с полномочиями администратора, щелкнув эту программу правой кнопкой мыши в меню Пуск и выбрав команду Запуск от имени администратора.
Создайте новый проект консольного приложения. В меню Файл выберите пункт Создать, а затем Проект. В диалоговом окне Создать проект выберите Visual Basic или Visual C#, выберите шаблон Консольное приложение и назовите его
Service
. Используйте Расположение по умолчанию.Проект C# Visual Studio создает файл с именем Program.cs. Этот класс содержит пустой метод с именем Main(). Для проекта VB в Visual Studio создается файл с именем Module1.vb с пустой подпрограммой с именем Main(). Эти методы необходимы для правильного создания проекта консольного приложения, поэтому их можно оставить в проекте.
Измените пространство имен
Service
по умолчанию наMicrosoft.ServiceModel.Samples
. Для этого щелкните проект правой кнопкой мыши в Обозревателе решений и выберите Свойства. Убедитесь, что выбрана вкладка Приложение на левой стороне диалогового окна Свойства. Для проекта C# введитеMicrosoft.ServiceModel.Samples
в поле ввода с меткой Пространство имен по умолчанию. Для проекта VB введитеMicrosoft.ServiceModel.Samples
в поле ввода с меткой Корневое пространство имен. Нажмите меню Файл и выберите Сохранить все, чтобы сохранить изменения.Если используется 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
Добавьте в проект ссылку на System.ServiceModel.dll.
В Обозревателе решений щелкните правой кнопкой мыши папку Ссылки в папке проекта и выберите команду Добавить ссылку.
Перейдите на вкладку .NET диалогового окна Добавление ссылки и воспользуйтесь прокруткой для перехода вниз, пока не отобразится System.ServiceModel (версия 4.0.0.0), выберите его и нажмите ОК.
Примечание При использовании компилятора командной строки (например, Csc.exe или Vbc.exe) необходимо указать путь к сборкам. По умолчанию на компьютере под управлением Windows Vista используется путь Windows\Microsoft.NET\Framework\v4.0. Добавьте оператор using (Imports в Visual Basic) для пространства имен System.ServiceModel.
Imports System.ServiceModel
using System.ServiceModel;
Определите новый интерфейс с именем
ICalculator
и примените к интерфейсу атрибут ServiceContractAttribute со значением Namespace, равным «http://Microsoft.ServiceModel.Samples». Рекомендуется явно указывать пространство имен, так как это исключает добавление значения пространства имен по умолчанию к имени контракта.Примечание При использовании атрибутов для аннотирования интерфейса или класса в имени атрибута можно опускать часть "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
Определите метод для каждой из операций, предоставляемой контрактом
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
Образец для начала работы
Резидентное размещение