OperationContext Kelas
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.
Menyediakan akses ke konteks eksekusi metode layanan.
public ref class OperationContext sealed : System::ServiceModel::IExtensibleObject<System::ServiceModel::OperationContext ^>
public sealed class OperationContext : System.ServiceModel.IExtensibleObject<System.ServiceModel.OperationContext>
type OperationContext = class
interface IExtensibleObject<OperationContext>
Public NotInheritable Class OperationContext
Implements IExtensibleObject(Of OperationContext)
- Warisan
-
OperationContext
- Penerapan
Contoh
Contoh kode berikut menggunakan Current properti dan GetCallbackChannel metode untuk mendapatkan saluran kembali ke pemanggil dari dalam metode . Semua metode dalam contoh ini adalah metode satu arah, memungkinkan layanan dan klien untuk berkomunikasi di kedua arah secara independen. Dalam hal ini, contoh aplikasi klien hanya mengharapkan satu panggilan pengembalian sebelum keluar, tetapi klien lain, misalnya klien Formulir Windows, dapat menerima sejumlah panggilan dari layanan.
using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(
Name = "SampleDuplexHello",
Namespace = "http://microsoft.wcf.documentation",
CallbackContract = typeof(IHelloCallbackContract),
SessionMode = SessionMode.Required
)]
public interface IDuplexHello
{
[OperationContract(IsOneWay = true)]
void Hello(string greeting);
}
public interface IHelloCallbackContract
{
[OperationContract(IsOneWay = true)]
void Reply(string responseToGreeting);
}
public class DuplexHello : IDuplexHello
{
public DuplexHello()
{
Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
}
~DuplexHello()
{
Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
}
public void Hello(string greeting)
{
Console.WriteLine("Caller sent: " + greeting);
Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
Console.WriteLine("Waiting two seconds before returning call.");
// Put a slight delay to demonstrate asynchronous behavior on client.
Thread.Sleep(2000);
IHelloCallbackContract callerProxy
= OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
string response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
Console.WriteLine("Sending back: " + response);
callerProxy.Reply(response);
}
}
}
Imports System.Collections.Generic
Imports System.ServiceModel
Imports System.Threading
Namespace Microsoft.WCF.Documentation
<ServiceContract(Name:="SampleDuplexHello", Namespace:="http://microsoft.wcf.documentation", _
CallbackContract:=GetType(IHelloCallbackContract), SessionMode:=SessionMode.Required)> _
Public Interface IDuplexHello
<OperationContract(IsOneWay:=True)> _
Sub Hello(ByVal greeting As String)
End Interface
Public Interface IHelloCallbackContract
<OperationContract(IsOneWay := True)> _
Sub Reply(ByVal responseToGreeting As String)
End Interface
Public Class DuplexHello
Implements IDuplexHello
Public Sub New()
Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
End Sub
Protected Overrides Sub Finalize()
Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
End Sub
Public Sub Hello(ByVal greeting As String) Implements IDuplexHello.Hello
Console.WriteLine("Caller sent: " & greeting)
Console.WriteLine("Session ID: " & OperationContext.Current.SessionId)
Console.WriteLine("Waiting two seconds before returning call.")
' Put a slight delay to demonstrate asynchronous behavior on client.
Thread.Sleep(2000)
Dim callerProxy = OperationContext.Current.GetCallbackChannel(Of IHelloCallbackContract)()
Dim response = "Service object " & Me.GetHashCode().ToString() & " received: " & greeting
Console.WriteLine("Sending back: " & response)
callerProxy.Reply(response)
End Sub
End Class
End Namespace
Klien berikut mengimplementasikan SampleDuplexHelloCallback
untuk menerima pesan panggilan balik. Kontrak panggilan balik yang diimpor bukan nama yang sama dengan yang ada di layanan, karena penggunaan Name properti dalam contoh sebelumnya. Perhatikan bahwa klien tidak membuat asumsi tentang apakah atau kapan klien mungkin menerima panggilan balik; panggilan balik server sepenuhnya independen dari panggilan keluar klien.
Catatan
Untuk contoh yang menggunakan OperationContext kelas dalam skenario klien, lihat OperationContextScope.
using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;
namespace Microsoft.WCF.Documentation
{
public class Client : SampleDuplexHelloCallback
{
AutoResetEvent waitHandle;
public Client()
{
waitHandle = new AutoResetEvent(false);
}
public void Run()
{
// Picks up configuration from the config file.
SampleDuplexHelloClient wcfClient
= new SampleDuplexHelloClient(new InstanceContext(this));
try
{
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Enter a greeting to send and press ENTER: ");
Console.Write(">>> ");
Console.ForegroundColor = ConsoleColor.Green;
string greeting = Console.ReadLine();
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Called service with: \r\n\t" + greeting);
wcfClient.Hello(greeting);
Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
this.waitHandle.WaitOne();
Console.ForegroundColor = ConsoleColor.Blue;
Console.WriteLine("Set was called.");
Console.Write("Press ");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("ENTER");
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write(" to exit...");
Console.ReadLine();
wcfClient.Close();
}
catch (TimeoutException timeProblem)
{
Console.WriteLine("The service operation timed out. " + timeProblem.Message);
Console.ReadLine();
wcfClient.Abort();
}
catch (CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message);
Console.ReadLine();
wcfClient.Abort();
}
}
public static void Main()
{
Client client = new Client();
client.Run();
}
public void Reply(string response)
{
Console.WriteLine("Received output.");
Console.WriteLine("\r\n\t" + response);
this.waitHandle.Set();
}
}
}
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading
Namespace Microsoft.WCF.Documentation
Public Class Client
Implements SampleDuplexHelloCallback
Private waitHandle As AutoResetEvent
Public Sub New()
waitHandle = New AutoResetEvent(False)
End Sub
Public Sub Run()
' Picks up configuration from the config file.
Dim wcfClient As New SampleDuplexHelloClient(New InstanceContext(Me))
Try
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Enter a greeting to send and press ENTER: ")
Console.Write(">>> ")
Console.ForegroundColor = ConsoleColor.Green
Dim greeting = Console.ReadLine()
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Called service with: " & Constants.vbCrLf & Constants.vbTab & greeting)
wcfClient.Hello(greeting)
Console.WriteLine("Execution passes service call and moves to the WaitHandle.")
Me.waitHandle.WaitOne()
Console.ForegroundColor = ConsoleColor.Blue
Console.WriteLine("Set was called.")
Console.Write("Press ")
Console.ForegroundColor = ConsoleColor.Red
Console.Write("ENTER")
Console.ForegroundColor = ConsoleColor.Blue
Console.Write(" to exit...")
Console.ReadLine()
wcfClient.Close()
Catch timeProblem As TimeoutException
Console.WriteLine("The service operation timed out. " & timeProblem.Message)
Console.ReadLine()
wcfClient.Abort()
Catch commProblem As CommunicationException
Console.WriteLine("There was a communication problem. " & commProblem.Message)
Console.ReadLine()
wcfClient.Abort()
End Try
End Sub
Public Shared Sub Main()
Dim client As New Client()
client.Run()
End Sub
Public Sub Reply(ByVal response As String) Implements SampleDuplexHelloCallback.Reply
Console.WriteLine("Received output.")
Console.WriteLine(Constants.vbCrLf & Constants.vbTab & response)
Me.waitHandle.Set()
End Sub
End Class
End Namespace
Keterangan
OperationContext Gunakan dari dalam operasi layanan untuk mengakses lingkungan eksekusi operasi saat ini. Secara khusus, konteks operasi digunakan untuk mengakses saluran panggilan balik dalam layanan dupleks, untuk menyimpan data status ekstra di seluruh bagian operasi, dan untuk mengakses header dan properti pesan masuk serta menambahkan header dan properti pesan keluar.
Untuk informasi selengkapnya tentang menggunakan ekstensi untuk menyimpan data status, lihat Objek yang Dapat Diperluas.
OperationContext memiliki properti dan metode berikut.
Properti Current mengembalikan objek yang OperationContext mewakili konteks eksekusi saat ini.
Properti ServiceSecurityContext mengembalikan lingkungan keamanan tempat metode dijalankan.
Properti EndpointDispatcher mendapatkan operasi System.ServiceModel.Dispatcher.EndpointDispatcher.
Properti Extensions mengembalikan koleksi ekstensi untuk saat ini OperationContext.
Properti Host mengembalikan ServiceHostBase objek yang mengelola layanan.
Properti HasSupportingTokens mengembalikan nilai yang menunjukkan apakah metode memiliki token pendukung, jika demikian, SupportingTokens properti mendapatkannya.
Properti IncomingMessageHeaders, IncomingMessageProperties, dan IncomingMessageVersion mendapatkan item ini dari pesan masuk.
Peristiwa OperationCompleted dipicu ketika operasi telah selesai.
Properti OutgoingMessageHeaders dan OutgoingMessageProperties mendapatkan item ini untuk pesan keluar.
Properti RequestContext mengembalikan RequestContext implementasi untuk metode .
Properti InstanceContext mengembalikan yang InstanceContext terkait dengan operasi.
Properti SessionId mengembalikan pengidentifikasi sesi untuk saluran dan objek saat ini.
Metode mengembalikan GetCallbackChannel saluran panggilan balik ke pemanggil dalam kasus komunikasi dupleks.
Metode SetTransactionComplete melakukan transaksi saat ini.
Konstruktor
OperationContext(IContextChannel) |
Menginisialisasi instans OperationContext baru kelas yang menggunakan yang ditentukan IContextChannel dalam aplikasi klien. |
Properti
Channel |
Mendapatkan saluran yang terkait dengan objek saat ini OperationContext . |
ClaimsPrincipal |
Mendapatkan prinsipal berbasis klaim yang terkait dengan operasi. |
Current |
Mendapatkan atau mengatur konteks eksekusi untuk utas saat ini. |
EndpointDispatcher |
Mendapatkan atau mengatur dispatcher titik akhir untuk titik akhir untuk memeriksa atau memodifikasi. |
Extensions |
Mendapatkan kumpulan ekstensi layanan dari konteks pesan saat ini. |
HasSupportingTokens |
Mendapatkan nilai yang menunjukkan apakah pesan masuk memiliki token pendukung. |
Host |
ServiceHost Mendapatkan untuk objek layanan saat ini. |
IncomingMessageHeaders |
Mendapatkan header pesan masuk untuk OperationContext. |
IncomingMessageProperties |
Mendapatkan properti pesan untuk pesan masuk di OperationContext. |
IncomingMessageVersion |
Mendapatkan versi pesan SOAP masuk untuk OperationContext. |
InstanceContext |
InstanceContext Mendapatkan objek yang mengelola instans layanan saat ini. |
IsUserContext |
Properti ini ditujukan untuk penggunaan sistem dan tidak boleh dipanggil oleh pengguna. |
OutgoingMessageHeaders |
Mendapatkan header pesan keluar untuk yang aktif OperationContext. |
OutgoingMessageProperties |
Mendapatkan properti pesan untuk pesan keluar di aktif OperationContext. |
RequestContext |
Mendapatkan atau mengatur RequestContext implementasi untuk metode ini. |
ServiceSecurityContext |
Mendapatkan atau mengatur di ServiceSecurityContext mana metode ini dijalankan. |
SessionId |
Mendapatkan yang String digunakan untuk mengidentifikasi sesi saat ini. |
SupportingTokens |
ICollection<T> Mendapatkan jenis SecurityToken. |
Metode
Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
GetCallbackChannel<T>() |
Mendapatkan saluran ke instans klien yang memanggil operasi saat ini. |
GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
GetType() |
Mendapatkan dari instans Type saat ini. (Diperoleh dari Object) |
MemberwiseClone() |
Membuat salinan dangkal dari saat ini Object. (Diperoleh dari Object) |
SetTransactionComplete() |
Menerapkan transaksi yang sedang dijalankan. |
ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
Acara
OperationCompleted |
Terjadi ketika operasi telah selesai. |