OperationContractAttribute.Action Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает действие WS-Addressing для сообщения запроса.
public:
property System::String ^ Action { System::String ^ get(); void set(System::String ^ value); };
public string Action { get; set; }
member this.Action : string with get, set
Public Property Action As String
Значение свойства
Действие, используемое при создании заголовка действия WS-Addressing.
Исключения
Значение равно null.
Примеры
В следующем примере показана служба, которая использует Action и ReplyAction свойства для явного управления действиями SOAP как входных, так и выходных сообщений (или ответов), а Name также свойство для управления именем операции в метаданных. Наконец, приложение также использует Action значение "*", чтобы указать метод, который обрабатывает нераспознанные сообщения.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Text;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(Namespace="http://Microsoft.WCF.Documentation")]
public interface ISampleService{
[OperationContract(
Action="http://Microsoft.WCF.Documentation/OperationContractMethod",
Name="OCAMethod",
ReplyAction="http://Microsoft.WCF.Documentation/ResponseToOCAMethod"
)]
string SampleMethod(string msg);
[OperationContractAttribute(Action = "*")]
void UnrecognizedMessageHandler(Message msg);
}
class SampleService : ISampleService
{
public string SampleMethod(string msg)
{
Console.WriteLine("Called with: {0}", msg);
return "The service greets you: " + msg;
}
public void UnrecognizedMessageHandler(Message msg)
{
Console.WriteLine("Unrecognized message: " + msg.ToString());
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Text
Namespace Microsoft.WCF.Documentation
<ServiceContract(Namespace:="http://Microsoft.WCF.Documentation")> _
Public Interface ISampleService
<OperationContract(Action:="http://Microsoft.WCF.Documentation/OperationContractMethod", _
Name:="OCAMethod", ReplyAction:="http://Microsoft.WCF.Documentation/ResponseToOCAMethod")> _
Function SampleMethod(ByVal msg As String) As String
<OperationContractAttribute(Action := "*")> _
Sub UnrecognizedMessageHandler(ByVal msg As Message)
End Interface
Friend Class SampleService
Implements ISampleService
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
Public Sub UnrecognizedMessageHandler(ByVal msg As Message) Implements ISampleService.UnrecognizedMessageHandler
Console.WriteLine("Unrecognized message: " & msg.ToString())
End Sub
End Class
End Namespace
Служба, реализующая этот контракт, отправляет сообщения, которые выглядят следующим образом:
<s:Envelope xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.WCF.Documentation/ResponseToOCAMethod</a:Action>
</s:Header>
<s:Body>
<OCAMethodResponse xmlns="http://Microsoft.WCF.Documentation">
<OCAMethodResult>The service greets you: Hello!</OCAMethodResult>
</OCAMethodResponse>
</s:Body>
</s:Envelope>
Комментарии
Action Используйте свойство для управления действием входного сообщения метода. Так как WCF использует это действие для отправки входящего сообщения в соответствующий метод, сообщения, используемые в операции контракта, должны иметь уникальные действия. Значение действия по умолчанию — это сочетание пространства имен контракта (значение "http://tempuri.org/"по умолчанию), имя контракта (имя интерфейса или имя класса, если не используется явный интерфейс службы), имя операции и дополнительная строка ("Ответ"), если сообщение является коррелированного ответа. Этот параметр по умолчанию можно переопределить свойством Action .
Чтобы указать, что операция службы обрабатывает все сообщения, которые служба получает, но не может быть направлена на операцию службы, укажите значение "*" (звездочка). Этот тип операции, называемый несоответствием обработчика сообщений, должен иметь одну из следующих сигнатур метода или InvalidOperationException вызывается:
Операция службы может принимать только Message объект и возвращать Message объект.
Операция службы может принимать только Message объект и возвращать ничего (т. е. возвращать
void).
Замечание
Контракт службы может иметь только одну операцию службы с свойством, заданным Action как "*". Любая группа контрактов служб, размещенных в том же прослушивании, что класс службы реализует, может иметь множество операций службы со Action свойством "*", если IsInitiating для свойства задано значение false"*". Однако только одна из этих операций службы может иметь Action свойство "*", а IsInitiating свойство имеет значение true. Дополнительные сведения см. в статье IsInitiating.