OperationContractAttribute.IsInitiating Свойство

Определение

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

public:
 property bool IsInitiating { bool get(); void set(bool value); };
public bool IsInitiating { get; set; }
member this.IsInitiating : bool with get, set
Public Property IsInitiating As Boolean

Значение свойства

Boolean

Значение true, если операции разрешено инициировать сеанс на сервере; в противном случае — значение false. Значение по умолчанию — true.

Примеры

В следующем примере представлена служба, которая реализует контракт службы, определяющий три метода. Службе требуется сеанс. Если первый вызов вызывающего объекта предназначен для любой операции, кроме MethodOne, канал отклоняется и создается исключение. Если вызывающий объект инициирует сеанс, вызывая операцию MethodOne, он может завершить этот сеанс связи в любое время, вызвав операцию MethodThree. MethodTwo может вызываться любое количество раз во время сеанса.

[ServiceContract(SessionMode=SessionMode.Required)]  
public class InitializeAndTerminateService  
{  
  [OperationContract(  
    IsOneWay=true,  
    IsInitiating=true,  
    IsTerminating=false  
  )]  
  public void MethodOne()  
  {  
    return;  
  }  

  [OperationContract(  
    IsInitiating=false,  
    IsTerminating=false  
  )]  
  public int MethodTwo(int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  [OperationContract(  
    IsOneWay=true,  
    IsInitiating=false,  
    IsTerminating=true  
  )]  
  public void MethodThree()  
  {  
    return;  
  }  
}  

Комментарии

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

Примечание

Свойство ServiceContractAttribute.SessionMode должно иметь значение Allowed или Required, а используемая привязка должна требовать или разрешать сеансы для правильной работы свойства IsInitiating.

Значение по умолчанию — true. Это означает, что операция может быть первой операцией, вызванной в канале. В дальнейшем вызовы инициирующего метода не будут оказывать влияние, кроме вызова метода. Другие сеансы не создаются. Если контракт не использует сеанс, задание для свойства IsInitiating значения false игнорируется.

Обычно для свойства IsInitiating задается значение false, чтобы заставить клиентов вызывать другой метод в службе перед вызовом данного метода. Например, если служба имеет ряд операций, зависящих от идентификационного номера заказа, можно присвоить свойству IsInitiating значение true для операции службы GetOrderId, а для всех остальных операций службы задать значение false. Это обеспечит получение каждым новым клиентом номера заказа до использования других методов, представленных данной службой.

Примечание

Между свойствами IsInitiating и Action существует взаимодействие. Контракт службы может содержать только одну операцию службы со значением "*" свойства Action. Любая группа контрактов служб, размещенных в том же URI прослушивания, которую реализует класс службы, может иметь множество операций службы со Action свойством "*" при IsInitiating установке falseсвойства. Однако только один из этих методов службы может иметь Action свойство "*", а IsInitiating для свойства задано значение true.

Если служба принимает сообщение для неинициирующей операции, она возвращает сообщение об ошибке SOAP ActionNotSupported. Для клиента это выглядит как исключение FaultException. Если сначала клиент вызывает неинициирующую операцию, его среда выполнения вызывает исключение System.InvalidOperationException.

Дополнительные сведения см. в разделе "Использование сеансов".

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