OperationContractAttribute.Action Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar eller anger åtgärden WS-Addressing för begärandemeddelandet.
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
Egenskapsvärde
Den åtgärd som ska användas för att generera WS-Addressing-åtgärdsrubriken.
Undantag
Värdet är null.
Exempel
Följande exempel är en tjänst som använder Action egenskaperna och ReplyAction för att uttryckligen styra SOAP-åtgärderna för både in- och utdatameddelanden (eller svar) och Name egenskapen för att styra namnet på åtgärden i metadata. Slutligen använder programmet även värdet Action "*" för att ange en metod som hanterar okända meddelanden.
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
En tjänst som implementerar det här kontraktet skickar meddelanden som ser ut som i följande exempel:
<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>
Kommentarer
Använd egenskapen Action för att styra åtgärden för metodens indatameddelande. Eftersom WCF använder den här åtgärden för att skicka ett inkommande meddelande till lämplig metod måste meddelanden som används i en kontraktåtgärd ha unika åtgärder. Standardåtgärdsvärdet är en kombination av kontraktsnamnområdet (standardvärdet är "http://tempuri.org/"), kontraktsnamnet (gränssnittsnamnet eller klassnamnet, om inget explicit tjänstgränssnitt används), åtgärdsnamnet och ytterligare en sträng ("Svar") om meddelandet är ett korrelerat svar. Du kan åsidosätta den här standardinställningen Action med egenskapen .
Ange värdet "*" (en asterisk) för att ange att en tjänståtgärd hanterar alla meddelanden som tjänsten tar emot men inte kan dirigeras till en tjänståtgärd. Den här typen av åtgärd, som kallas en omatchad meddelandehanterare, måste ha någon av följande metodsignaturer, eller så genereras en InvalidOperationException :
Tjänståtgärden kan bara ta ett Message objekt och returnera ett Message objekt.
Tjänståtgärden kan bara ta ett Message objekt och returnera ingenting (det vill: returnera
void).
Note
Ett tjänstkontrakt kan bara ha en tjänståtgärd med egenskapen inställd på Action "*". Alla grupper av tjänstkontrakt som finns på samma listenUri som en tjänstklass implementerar kan ha många tjänståtgärder med Action egenskapen inställd på "*" när IsInitiating egenskapen är inställd på false. Men endast en av dessa tjänståtgärder kan ha Action egenskapen inställd på "*" och egenskapen IsInitiating är inställd på true. Mer information finns i IsInitiating.