OperationContractAttribute.Action Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá nebo nastaví WS-Addressing akci žádosti zprávy.
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
Hodnota vlastnosti
Akce, která se má použít při generování záhlaví akce WS-Addressing.
Výjimky
Hodnota je null
.
Příklady
Následující příklad je služba, která používá Action a ReplyAction vlastnosti explicitně řídit akce PROTOKOLU SOAP vstupních i výstupních zpráv (nebo odpovědi) a Name vlastnost řídit název operace v metadatech. Aplikace také používá Action hodnotu "*" k označení metody, která zpracovává nerozpoznané zprávy.
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
Služba, která implementuje tento kontrakt, odesílá zprávy, které vypadají jako v následujícím příkladu:
<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>
Poznámky
Action Vlastnost slouží k řízení akce vstupní zprávy metody. Vzhledem k tomu, že WCF tuto akci používá k odeslání příchozí zprávy do příslušné metody, zprávy používané v rámci operace kontraktu musí mít jedinečné akce. Výchozí hodnota akce je kombinace oboru názvů kontraktu (výchozí hodnota je "http://tempuri.org/"
), název kontraktu (název rozhraní nebo název třídy, pokud se nepoužívá žádné explicitní rozhraní služby), název operace a další řetězec ("Response") pokud je zpráva korelovaná odpověď. Toto výchozí nastavení můžete přepsat vlastností Action .
Chcete-li označit, že operace služby zpracovává všechny zprávy, které služba přijímá, ale nelze ji směrovat na operaci služby, zadejte hodnotu "*" (hvězdička). Tento typ operace, označovaný jako obslužná rutina zprávy, musí mít jeden z následujících podpisů metody nebo InvalidOperationException je vyvolán:
Operace služby může převzít pouze Message objekt a vrátit Message objekt.
Operace služby může převzít pouze Message objekt a vrátit nic (to znamená vrátit
void
).
Poznámka
Kontrakt služby může mít pouze jednu operaci služby s vlastností nastavenou Action na *. Každá skupina kontraktů služeb hostovaných na stejném naslouchacím procesu, kterou implementuje třída služby, může mít mnoho operací služby s Action vlastností nastavenou na "*" při IsInitiating nastavení false
vlastnosti . Nicméně pouze jeden z těchto operací služby může mít Action vlastnost nastavenou na "*" a vlastnost nastavena IsInitiating na true. Další podrobnosti najdete tady: IsInitiating.