OperationContractAttribute.Action Properti
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mendapatkan atau mengatur tindakan WS-Addressing dalam pesan permintaan.
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
Nilai Properti
Tindakan yang digunakan dalam menghasilkan header Tindakan WS-Addressing.
Pengecualian
Nilainya adalah null.
Contoh
Contoh berikut adalah layanan yang menggunakan Action properti dan ReplyAction untuk secara eksplisit mengontrol tindakan SOAP dari pesan input dan output (atau balasan), dan Name properti untuk mengontrol nama operasi dalam metadata. Terakhir, aplikasi ini juga menggunakan Action nilai "*" untuk menunjukkan metode yang menangani pesan yang tidak dikenali.
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
Layanan yang menerapkan kontrak ini mengirim pesan yang terlihat seperti contoh berikut:
<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>
Keterangan
Action Gunakan properti untuk mengontrol tindakan pesan input metode. Karena WCF menggunakan tindakan ini untuk mengirimkan pesan masuk ke metode yang sesuai, pesan yang digunakan dalam operasi kontrak harus memiliki tindakan unik. Nilai tindakan default adalah kombinasi namespace kontrak (nilai defaultnya adalah "http://tempuri.org/"), nama kontrak (nama antarmuka atau nama kelas, jika tidak ada antarmuka layanan eksplisit yang digunakan), nama operasi, dan string tambahan ("Respons") jika pesan adalah respons yang berkorelasi. Anda dapat mengambil alih default ini dengan Action properti .
Untuk menunjukkan bahwa operasi layanan menangani semua pesan yang diterima layanan tetapi tidak dapat diarahkan ke operasi layanan, tentukan nilai "*" (tanda bintang). Jenis operasi ini, yang disebut handler pesan yang tidak cocok, harus memiliki salah satu tanda tangan metode berikut, atau dilemparkan InvalidOperationException :
Operasi layanan hanya Message dapat mengambil objek dan mengembalikan Message objek.
Operasi layanan hanya Message dapat mengambil objek dan tidak mengembalikan apa pun (yaitu, mengembalikan
void).
Nota
Kontrak layanan hanya dapat memiliki satu operasi layanan dengan properti yang Action diatur ke "*". Setiap grup kontrak layanan yang dihosting di listenUri yang sama dengan yang diterapkan kelas layanan dapat memiliki banyak operasi layanan dengan properti yang Action diatur ke "*" ketika IsInitiating properti diatur ke false. Namun, hanya salah satu operasi layanan tersebut Action yang dapat mengatur properti ke "*" dan properti diatur IsInitiating ke true. Untuk detail lebih lanjut, lihat IsInitiating.