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
- Наследование
- Атрибуты
Примеры
В следующем примере кода показан простой контракт службы с одной операцией.
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 |
Указывает, что операция реализуется асинхронно с помощью пары методов |
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) |