OperationContext Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje přístup k kontextu spuštění metody služby.
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)
- Dědičnost
-
OperationContext
- Implementuje
Příklady
Následující příklad kódu používá Current vlastnost a GetCallbackChannel metodu k získání kanálu zpět volajícího z metody. Všechny metody v tomto příkladu jsou jednosměrné metody, které umožňují službě a klientovi komunikovat v obou směrech nezávisle. V tomto případě očekává ukázková klientská aplikace před ukončením pouze jedno volání return, ale jiný klient, například klient Modelu Windows Forms, může přijímat libovolný počet volání ze služby.
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
Následující klient implementuje SampleDuplexHelloCallback přijetí zprávy zpětného volání. Importovaný kontrakt zpětného volání není stejný název jako ten ve službě, protože použití Name vlastnosti v předchozím příkladu. Všimněte si, že klient nepředpokládá, zda nebo kdy může obdržet zpětné volání; zpětné volání serveru je zcela nezávislé na odchozím volání klienta.
Poznámka:
Příklad, který používá OperationContext třídu ve scénáři klienta, viz 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
Poznámky
OperationContext Pro přístup k aktuálnímu spouštěcímu prostředí operace použijte z operace služby. Konkrétně se kontext operace používá pro přístup ke kanálům zpětného volání v duplexních službách, k ukládání dodatečných stavových dat napříč částmi operací a pro přístup k záhlavím a vlastnostem příchozích zpráv a také k přidání záhlaví a vlastností odchozí zprávy.
Další informace o použití rozšíření k ukládání stavových dat naleznete v tématu Rozšiřitelné objekty.
Obsahuje OperationContext následující vlastnosti a metody.
Vlastnost Current vrátí OperationContext objekt představující aktuální kontext spuštění.
Vlastnost ServiceSecurityContext vrátí prostředí zabezpečení, pod kterým se metoda provede.
Vlastnost EndpointDispatcher získá operaci System.ServiceModel.Dispatcher.EndpointDispatcher.
Vlastnost Extensions vrátí kolekci rozšíření pro aktuální OperationContext.
Vlastnost Host vrátí ServiceHostBase objekt, který spravuje službu.
Vlastnost HasSupportingTokens vrátí hodnotu, která určuje, zda metoda má podpůrné tokeny, pokud ano, SupportingTokens vlastnost je získá.
IncomingMessagePropertiesTyto položky se IncomingMessageVersion z příchozí zprávy načítá IncomingMessageHeadersa vlastnosti.
Událost OperationCompleted se aktivuje po dokončení operace.
Tyto OutgoingMessageHeaders položky a OutgoingMessageProperties vlastnosti se zobrazí pro odchozí zprávu.
Vlastnost RequestContext vrátí implementaci RequestContext metody.
Vlastnost InstanceContext vrátí přidruženou InstanceContext k operaci.
Vlastnost SessionId vrátí identifikátor relace pro aktuální kanál a objekt.
Metoda GetCallbackChannel vrátí volajícímu kanál zpětného volání v případě duplexní komunikace.
Metoda SetTransactionComplete potvrdí aktuální transakci.
Konstruktory
| Name | Description |
|---|---|
| OperationContext(IContextChannel) |
Inicializuje novou instanci OperationContext třídy, která používá zadané IContextChannel v klientské aplikaci. |
Vlastnosti
| Name | Description |
|---|---|
| Channel |
Získá kanál přidružený k aktuálnímu OperationContext objektu. |
| ClaimsPrincipal |
Získá objekt zabezpečení založený na deklarací identity přidružené k operaci. |
| Current |
Získá nebo nastaví kontext spuštění pro aktuální vlákno. |
| EndpointDispatcher |
Získá nebo nastaví dispečer koncového bodu pro koncový bod ke kontrole nebo úpravě. |
| Extensions |
Získá kolekci rozšíření služby z aktuálního kontextu zprávy. |
| HasSupportingTokens |
Získá hodnotu, která označuje, zda příchozí zpráva má podpůrné tokeny. |
| Host |
ServiceHost Získá pro aktuální objekt služby. |
| IncomingMessageHeaders |
Získá hlavičky příchozí zprávy pro OperationContext. |
| IncomingMessageProperties |
Získá vlastnosti zprávy příchozí zprávy v objektu OperationContext. |
| IncomingMessageVersion |
Získá příchozí verzi zprávy SOAP pro OperationContext. |
| InstanceContext |
InstanceContext Získá objekt, který spravuje aktuální instanci služby. |
| IsUserContext |
Tato vlastnost je určená pro použití systému a uživatelé by ji neměli volat. |
| OutgoingMessageHeaders |
Získá záhlaví odchozí zprávy pro aktivní OperationContext. |
| OutgoingMessageProperties |
Získá vlastnosti zprávy pro odchozí zprávu v aktivní OperationContext. |
| RequestContext |
Získá nebo nastaví implementaci pro tuto metodu RequestContext . |
| ServiceSecurityContext |
Získá nebo nastaví, ServiceSecurityContext ve kterém se tato metoda provede. |
| SessionId |
String Získá použitou k identifikaci aktuální relace. |
| SupportingTokens |
ICollection<T> Získá typ SecurityToken. |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetCallbackChannel<T>() |
Získá kanál do instance klienta, která volala aktuální operaci. |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| SetTransactionComplete() |
Potvrdí aktuálně spuštěnou transakci. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
Událost
| Name | Description |
|---|---|
| OperationCompleted |
Nastane po dokončení operace. |