Практическое руководство. Создание контракта типа "запрос-ответ"

Контракт «запрос-ответ» указывает метод, который возвращает ответ. Необходима отправка ответа и его корреляция запросу согласно условиям этого контракта. Даже если метод не возвращает ответ (void в C# или Sub в Visual Basic), инфраструктура создает и отправляет вызывающему объекту пустое сообщение. Чтобы запретить отправку пустого ответного сообщения, используйте для операции односторонний контракт.

Создание контракта типа запрос-ответ

  1. Создайте интерфейс на любом языке программирования.

  2. Примените атрибут ServiceContractAttribute к интерфейсу.

  3. Примените атрибут OperationContractAttribute к каждому методу, который могут вызывать клиенты.

  4. Необязательно. Установите свойство IsOneWay в значение true, чтобы избежать отправки пустого ответного сообщения. По умолчанию все операции используют контракты «запрос-ответ».

Пример

В следующем примере определяется контракт для службы калькулятора, предоставляющей методы Add и Subtract. Метод Multiply не является частью контракта, поскольку он не отмечен классом OperationContractAttribute, а потому недоступен клиентам.

using System.ServiceModel;

[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    // It would be equivalent to write explicitly:
    // [OperationContract(IsOneWay=false)]
    int Add(int a, int b);

    [OperationContract]
    int Subtract(int a, int b);

    int Multiply(int a, int b)
}
  • Дополнительные сведения о том, как указать контракты операций, см. в OperationContractAttribute классе и свойстве IsOneWay .

  • Применение атрибутов ServiceContractAttribute и OperationContractAttribute вызывает автоматическое создание определений контракта службы в документе WSDL после развертывания службы. Документ загружается путем добавления ?wsdl к базовому адресу HTTP для службы, Например: http://microsoft/CalculatorService?wsdl

См. также