Как создать односторонний контракт

В этом разделе показаны основные шаги по созданию методов, использующих односторонний контракт. Такие методы вызывают операции в службе Windows Communication Foundation (WCF) от клиента, но не ожидают ответа. Этот тип контракта можно использовать, например, для публикации уведомлений для многих подписчиков. При создании дуплексного контракта (двустороннего) можно также использовать односторонние контракты, что позволяет клиентам и серверам взаимодействовать друг с другом независимо, чтобы обе стороны могли инициировать вызовы друг к другу. Это может позволять серверу, в частности, выполнять односторонние запросы к клиенту, которые клиент рассматривает как события. Подробные сведения об указании односторонних методов см. в свойстве IsOneWay и классе OperationContractAttribute.

Дополнительную информацию о создании клиентского приложения для дуплексного контракта см. в статье Как: Доступ к службам с контрактами One-Way и Request-Reply. Рабочий пример см. в примере one-Way .

Создание одностороннего контракта

  1. Создайте контракт службы, применяя ServiceContractAttribute класс к интерфейсу, который определяет методы, которые необходимо реализовать.

  2. Укажите, какие методы в интерфейсе клиент может вызвать, применив OperationContractAttribute к ним класс.

  3. Обозначьте операции, которые не должны иметь выходных данных (без возвращаемого значения и без параметров out или ref), как односторонние, установив IsOneWay свойство в true. Обратите внимание, что операции, которые содержат OperationContractAttribute класс, по умолчанию удовлетворяют контракту типа "запрос-ответ", поскольку свойство IsOneWay изначально по false умолчанию. Поэтому необходимо явно указать значение свойства атрибута как true, если требуется односторонний контракт для метода.

Пример

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

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
    [OperationContract(IsOneWay=true)]
    void Clear();
    [OperationContract(IsOneWay = true)]
    void AddTo(double n);
    [OperationContract(IsOneWay = true)]
    void SubtractFrom(double n);
    [OperationContract(IsOneWay = true)]
    void MultiplyBy(double n);
    [OperationContract(IsOneWay = true)]
    void DivideBy(double n);
    [OperationContract]
    double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession

    <OperationContract(IsOneWay:=True)> _
    Sub Clear()
    <OperationContract(IsOneWay:=True)> _
    Sub AddTo(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub SubtractFrom(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub MultiplyBy(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub DivideBy(ByVal n As Double)
    <OperationContract()> _
    Function Equal() As Double
End Interface

См. также