Bagikan melalui


OperationContractAttribute.Action Properti

Definisi

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.

Berlaku untuk