Как реализовать контракт службы Windows Communication Foundation
Это вторая из шести задач, выполнение которых необходимо для создания базовой службы Windows Communication Foundation (WCF) и клиента, который может вызывать службу. Общие сведения обо всех шести задачах см. в разделе Учебник по началу работы.
Чтобы создать службу WCF, сначала требуется создать контракт, определяемый с помощью интерфейса. Дополнительные сведения создании интерфейса см. в разделе Как определить контракт службы Windows Communication Foundation. Следующим шагом, проиллюстрированном в этом примере, является реализация интерфейса. Это предполагает создание класса с именем CalculatorService, реализующего пользовательский интерфейс ICalculator. Код, используемый для выполнения этой задачи, приведен в примере после описания процедуры.
Реализация контракта службы WCF
Создайте новый класс
CalculatorService
в том же файле, где определен интерфейсICalculator
. КлассCalculatorService
реализует интерфейсICalculator
.Public Class CalculatorService Implements ICalculator
public class CalculatorService : ICalculator
Реализуйте каждый метод, определенный в интерфейсе
ICalculator
в рамках классаCalculatorService
.Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add Dim result As Double = n1 + n2 ' Code added to write output to the console window. Console.WriteLine("Received Add({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract Dim result As Double = n1 - n2 Console.WriteLine("Received Subtract({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply Dim result As Double = n1 * n2 Console.WriteLine("Received Multiply({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide Dim result As Double = n1 / n2 Console.WriteLine("Received Divide({0},{1})", n1, n2) Console.WriteLine("Return: {0}", result) Return result End Function
public double Add(double n1, double n2) { double result = n1 + n2; Console.WriteLine("Received Add({0},{1})", n1, n2); // Code added to write output to the console window. Console.WriteLine("Return: {0}", result); return result; } public double Subtract(double n1, double n2) { double result = n1 - n2; Console.WriteLine("Received Subtract({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Multiply(double n1, double n2) { double result = n1 * n2; Console.WriteLine("Received Multiply({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; } public double Divide(double n1, double n2) { double result = n1 / n2; Console.WriteLine("Received Divide({0},{1})", n1, n2); Console.WriteLine("Return: {0}", result); return result; }
Примечание
Выходной код записи был добавлен для удобства при тестировании.
Пример
В следующем примере кода показан интерфейс, определяющий контракт, и реализация этого интерфейса.
Imports System
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' 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
' Step 1: Create service class that implements the service contract.
Public Class CalculatorService
Implements ICalculator
' Step 2: Implement functionality for the service operations.
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Dim result As Double = n1 + n2
' Code added to write output to the console window.
Console.WriteLine("Received Add({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Dim result As Double = n1 - n2
Console.WriteLine("Received Subtract({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Dim result As Double = n1 * n2
Console.WriteLine("Received Multiply({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Dim result As Double = n1 / n2
Console.WriteLine("Received Divide({0},{1})", n1, n2)
Console.WriteLine("Return: {0}", result)
Return result
End Function
End Class
End Namespace
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
// Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[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);
}
// Step 1: Create service class that implements the service contract.
public class CalculatorService : ICalculator
{
// Step 2: Implement functionality for the service operations.
public double Add(double n1, double n2)
{
double result = n1 + n2;
Console.WriteLine("Received Add({0},{1})", n1, n2);
// Code added to write output to the console window.
Console.WriteLine("Return: {0}", result);
return result;
}
public double Subtract(double n1, double n2)
{
double result = n1 - n2;
Console.WriteLine("Received Subtract({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
public double Multiply(double n1, double n2)
{
double result = n1 * n2;
Console.WriteLine("Received Multiply({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
public double Divide(double n1, double n2)
{
double result = n1 / n2;
Console.WriteLine("Received Divide({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
}
}
Теперь контракт службы был создан и реализован. Создайте решение, чтобы убедиться в отсутствии ошибок компиляции, затем переходите к разделу Как размещать и запускать базовую службу Windows Communication Foundation для запуска службы. Сведения по устранению неполадок см. в разделе Устранение неполадок, связанных с учебником по началу работы.
Компиляция кода
При использовании компилятора с интерфейсом командной строки необходимо сослаться на сборку System.ServiceModel.
Если используется Visual Studio, выберите в меню Построение пункт Построить решение (или нажмите сочетание клавиш CTRL+SHIFT+B).