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


OperationContractAttribute Класс

Определение

Указывает, что метод определяет операцию, которая является частью контракта службы в приложении Windows Communication Foundation (WCF).

public ref class OperationContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type OperationContractAttribute = class
    inherit Attribute
Public NotInheritable Class OperationContractAttribute
Inherits Attribute
Наследование
OperationContractAttribute
Атрибуты

Примеры

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

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    // This operation specifies an explicit protection level requirement.
    [OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
    Console.WriteLine("Called with: {0}", msg);
      return "The service greets you: " + msg;
  }

  #endregion
  }
}
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="Microsoft.WCF.Documentation")> _
  Public Interface ISampleService
    ' This operation specifies an explicit protection level requirement.
    <OperationContract(ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
    Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
      Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
    Console.WriteLine("Called with: {0}", msg)
       Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

В следующем примере представлена служба, которая реализует неявный контракт службы, определяющий три операции. Две из этих операций являются двусторонними и возвращают базовые ответные сообщения вызывающему объекту независимо от возвращаемого значения. Третья операция принимает вызов (базовое входящее сообщение), но не возвращает базового ответного сообщения.

[ServiceContractAttribute]  
public class OneAndTwoWay  
{  
  // The client waits until a response message appears.  
  [OperationContractAttribute]  
  public int MethodOne (int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  // The client waits until an empty response message appears.  
  [OperationContractAttribute]  
  public void MethodTwo (int x)  
  {  
    return;  
  }  

  // The client returns as soon as an outbound message  
  // is dispatched to the service; no response  
  // message is generated or sent from the service.  
  [OperationContractAttribute(IsOneWay=true)]  
  public void MethodThree (int x)  
  {  
    return;  
  }  
}  

Комментарии

Примените атрибут OperationContractAttribute к методу, чтобы указать, что метод реализует операцию службы как часть контракта службы (заданного атрибутом ServiceContractAttribute).

Используйте свойства OperationContractAttribute для управления структурой операции и значениями, выраженными в метаданных.

  • Свойство Action задает действие, однозначно определяющее данную операцию. Диспетчеры WCF запрашивают сообщения в методы на основе их действий.

  • Свойство AsyncPattern указывает, что операция реализована или может быть вызвана асинхронно с помощью пары методов Begin/End.

  • Свойство HasProtectionLevel указывает, задано ли явно свойство ProtectionLevel.

  • Свойство IsOneWay указывает, что операция состоит только из одного входного сообщения. Для операции не существует связанного с ней выходного сообщения.

  • Свойство IsInitiating определяет, может ли быть данная операция начальной операцией сеанса.

  • Свойство IsTerminating указывает, пытается ли WCF завершить текущий сеанс после завершения операции.

  • Свойство ProtectionLevel определяет безопасность уровня сообщений, которая требуется для операции во время выполнения.

  • Свойство ReplyAction определяет действие ответного сообщения для операции.

Атрибут OperationContractAttribute объявляет, что метод представляет собой операцию в контракте службы. В качестве операций службы представляются только методы, отмеченные атрибутом OperationContractAttribute. Контракт службы без методов, отмеченных атрибутом OperationContractAttribute, не представляет никаких операций.

Свойство AsyncPattern указывает, что пара<Begin методов methodName> и End<methodName> образуют одну операцию, реализованную асинхронно (как на клиенте, так и в службе). Способность службы реализовать операции асинхронно является отдельной частью реализации службы и не представляется в метаданных (например, WSDL).

Подобным образом клиенты могут выбрать асинхронный вызов операций независимо от реализации метода службы. Асинхронный вызов операций службы в клиенте рекомендуется тогда, когда выполнение метода службы занимает некоторое время, но он должен вернуть информацию непосредственно клиенту. Дополнительные сведения см. в разделе AsyncPattern.

Свойство IsOneWay указывает, что метод не возвращает никакого значения вообще, включая пустое базовое ответное сообщение. Метод такого типа полезен для уведомлений или взаимодействия в стиле событий. Методы этого типа не могут вернуть ответное сообщение, поэтому объявление метода должно вернуть void.

Важно!

При программном извлечении хранилища данных в этом атрибуте ContractDescription используйте класс вместо отражения.

Примечание

Если свойству IsOneWay присвоено значение false (по умолчанию), даже методы, возвращающие void, являются двусторонними на уровне базовых сообщений. В этом случае инфраструктура создает и отправляет пустое сообщение, чтобы указать вызывающему объекту о возврате метода. Использование такого подхода позволяет приложению и инфраструктуре отправлять информацию об ошибках (например, об ошибках SOAP) назад клиенту. Единственный способ предотвратить создание и отправку ответного сообщения — задание для свойства IsOneWay значения true. Дополнительные сведения см. в разделе Односторонние службы.

Свойства Action и ReplyAction могут использоваться не только для изменения действия по умолчанию сообщений SOAP, но и для создания обработчиков нераспознаваемых сообщений или запрета добавления действий для непосредственного программирования сообщений. Используйте свойство IsInitiating, чтобы запретить клиентам вызов конкретной операции службы до других операций. IsTerminating Используйте свойство , чтобы WCF закрыл канал после вызова определенной операции службы. Дополнительные сведения см. в разделе Использование сеансов.

Свойство ProtectionLevel позволяет указать в контракте операции, должны ли сообщения операции подписываться, шифроваться или подписываться и шифроваться. Если привязка не может обеспечить уровень безопасности, определенный контрактом, во время выполнения вызывается исключение. Дополнительные сведения см. в разделах ProtectionLevelи Общие сведения об уровне защиты.

Конструкторы

OperationContractAttribute()

Инициализирует новый экземпляр класса OperationContractAttribute.

Свойства

Action

Возвращает или задает действие WS-Addressing сообщения запроса.

AsyncPattern

Указывает, что операция реализуется асинхронно с помощью пары методов Begin<methodName> и End<methodName> контракта службы.

HasProtectionLevel

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

IsInitiating

Возвращает или задает значение, указывающее, реализует ли метод операцию, которая может инициировать сеанс на сервере (если такой сеанс существует).

IsOneWay

Возвращает или задает значение, указывающее, возвращает ли операция ответное сообщение.

IsTerminating

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

Name

Возвращает или задает имя операции.

ProtectionLevel

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

ReplyAction

Возвращает или задает значение действия SOAP для ответного сообщения операции.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

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

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)

Применяется к