OperationContractAttribute.Action Eigenschap
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u de WS-Adresseringsactie van het aanvraagbericht op of stelt u deze in.
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
Waarde van eigenschap
De actie die moet worden gebruikt bij het genereren van de WS-Addressing Action-header.
Uitzonderingen
De waarde is null.
Voorbeelden
Het volgende voorbeeld is een service die gebruikmaakt van de Action en ReplyAction eigenschappen om expliciet de SOAP-acties van zowel de invoer- als uitvoerberichten (of antwoorden) te beheren en de Name eigenschap om de naam van de bewerking in metagegevens te beheren. Ten slotte gebruikt de toepassing ook een Action waarde van '*' om een methode aan te geven die niet-herkende berichten verwerkt.
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
Een service die dit contract implementeert, verzendt berichten die eruitzien als in het volgende voorbeeld:
<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>
Opmerkingen
Gebruik de Action eigenschap om de actie van het invoerbericht van de methode te beheren. Omdat WCF deze actie gebruikt om een binnenkomend bericht naar de juiste methode te verzenden, moeten berichten die in een contractbewerking worden gebruikt, unieke acties hebben. De standaardactiewaarde is een combinatie van de contractnaamruimte (de standaardwaarde is "http://tempuri.org/"), de contractnaam (interfacenaam of de klassenaam, als er geen expliciete service-interface wordt gebruikt), de naam van de bewerking en een extra tekenreeks ('Antwoord') als het bericht een gecorreleerd antwoord is. U kunt deze standaardwaarde overschrijven met de Action eigenschap.
Als u wilt aangeven dat een servicebewerking alle berichten verwerkt die de service ontvangt, maar niet kan worden omgeleid naar een servicebewerking, geeft u de waarde '*' (een sterretje) op. Dit type bewerking, een zogenaamde niet-overeenkomende berichthandler, moet een van de volgende methodehandtekeningen hebben of er wordt een InvalidOperationException gegenereerd:
De servicebewerking kan alleen een Message object aannemen en een Message object retourneren.
De servicebewerking kan alleen een Message object aannemen en niets retourneren (dat wil wel retourneren
void).
Note
Een servicecontract kan slechts één servicebewerking hebben waarbij de Action eigenschap is ingesteld op '*'. Elke groep servicecontracten die worden gehost op dezelfde listenUri die door een serviceklasse wordt geïmplementeerd, kan veel servicebewerkingen hebben waarbij de Action eigenschap is ingesteld op '*' wanneer de IsInitiating eigenschap is ingesteld op false. Slechts één van deze servicebewerkingen kan echter de Action eigenschap instellen op '*' en de IsInitiating eigenschap is ingesteld op true. Zie IsInitiating voor meer informatie.