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í akci WS-Addressing ve zprávě požadavku.
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 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 Pomocí vlastnosti můžete řídit akci 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 ("Odpověď") 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 nemůže být směrována 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 identifikátoruURI, kterou třída služby implementuje, může mít mnoho operací služby s Action vlastností nastavenou na "*", pokud IsInitiating je vlastnost nastavena na false. Pouze jeden z těchto operací služby však může mít Action vlastnost nastavenou na "*" a IsInitiating vlastnost nastavena na hodnotu true. Další podrobnosti najdete tady: IsInitiating.