OperationContext Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Ger åtkomst till körningskontexten för en tjänstmetod.
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)
- Arv
-
OperationContext
- Implementeringar
Exempel
I följande kodexempel används Current egenskapen och GetCallbackChannel metoden för att hämta kanalen tillbaka till anroparen inifrån en metod. Alla metoder i det här exemplet är enkelriktade metoder som gör det möjligt för tjänsten och klienten att kommunicera i båda riktningarna oberoende av varandra. I det här fallet förväntar sig exempelklientprogrammet bara ett returanrop innan det avslutas, men en annan klient, till exempel en Windows Forms-klient, kan ta emot valfritt antal anrop från tjänsten.
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
Följande klient implementerar SampleDuplexHelloCallback för att ta emot motringningsmeddelandet. Det importerade återanropskontraktet är inte samma namn som det i tjänsten, på grund av användningen av Name egenskapen i föregående exempel. Observera att klienten inte gör några antaganden om huruvida eller när den kan få ett återanrop. serveråteranropet är helt oberoende av klientens utgående anrop.
Note
Ett exempel som använder OperationContext klassen i ett klientscenario finns OperationContextScopei .
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
Kommentarer
OperationContext Använd inifrån en tjänståtgärd för att få åtkomst till den aktuella åtgärdskörningsmiljön. I synnerhet används åtgärdskontexten för att komma åt motringningskanaler i duplex-tjänster, för att lagra extra tillståndsdata över delar av åtgärderna och för att komma åt inkommande meddelandehuvuden och egenskaper samt lägga till utgående meddelandehuvuden och egenskaper.
Mer information om hur du använder tillägg för att lagra tillståndsdata finns i Utökningsbara objekt.
Har OperationContext följande egenskaper och metoder.
Egenskapen Current returnerar objektet OperationContext som representerar den aktuella körningskontexten.
Egenskapen ServiceSecurityContext returnerar säkerhetsmiljön under vilken metoden körs.
Egenskapen EndpointDispatcher hämtar åtgärdens System.ServiceModel.Dispatcher.EndpointDispatcher.
Egenskapen Extensions returnerar en tilläggssamling för den aktuella OperationContext.
Egenskapen Host returnerar objektet ServiceHostBase som hanterar tjänsten.
Egenskapen HasSupportingTokens returnerar ett värde som anger om metoden har stödtoken, i så fall SupportingTokens får egenskapen dem.
Egenskaperna IncomingMessageHeaders, IncomingMessagePropertiesoch IncomingMessageVersion hämtar dessa objekt från det inkommande meddelandet.
Händelsen OperationCompleted utlöses när åtgärden har slutförts.
Egenskaperna OutgoingMessageHeaders och OutgoingMessageProperties hämtar dessa objekt för det utgående meddelandet.
Egenskapen RequestContext returnerar implementeringen RequestContext för metoden.
Egenskapen InstanceContext returnerar den InstanceContext som är associerad med åtgärden.
Egenskapen SessionId returnerar sessionsidentifieraren för den aktuella kanalen och objektet.
Metoden GetCallbackChannel returnerar en återanropskanal till anroparen vid dubbelsidig kommunikation.
Metoden SetTransactionComplete checkar in den aktuella transaktionen.
Konstruktorer
| Name | Description |
|---|---|
| OperationContext(IContextChannel) |
Initierar en ny instans av OperationContext klassen som använder den angivna IContextChannel i ett klientprogram. |
Egenskaper
| Name | Description |
|---|---|
| Channel |
Hämtar kanalen som är associerad med det aktuella OperationContext objektet. |
| ClaimsPrincipal |
Hämtar det anspråksbaserade huvudkontot som är associerat med åtgärden. |
| Current |
Hämtar eller anger körningskontexten för den aktuella tråden. |
| EndpointDispatcher |
Hämtar eller anger slutpunktsutskicket för slutpunkten som ska inspekteras eller ändras. |
| Extensions |
Hämtar samlingen av tjänsttillägg från den aktuella meddelandekontexten. |
| HasSupportingTokens |
Hämtar ett värde som anger om det inkommande meddelandet har stödtoken. |
| Host |
ServiceHost Hämtar för det aktuella tjänstobjektet. |
| IncomingMessageHeaders |
Hämtar inkommande meddelandehuvuden OperationContextför . |
| IncomingMessageProperties |
Hämtar meddelandeegenskaperna för det inkommande meddelandet i OperationContext. |
| IncomingMessageVersion |
Hämtar den inkommande SOAP-meddelandeversionen för OperationContext. |
| InstanceContext |
Hämtar objektet InstanceContext som hanterar den aktuella tjänstinstansen. |
| IsUserContext |
Den här egenskapen är avsedd för systemanvändning och bör inte anropas av användare. |
| OutgoingMessageHeaders |
Hämtar utgående meddelandehuvuden för den aktiva OperationContext. |
| OutgoingMessageProperties |
Hämtar meddelandeegenskaperna för det utgående meddelandet i den aktiva OperationContext. |
| RequestContext |
Hämtar eller anger implementeringen för den RequestContext här metoden. |
| ServiceSecurityContext |
Hämtar eller anger inom vilken den ServiceSecurityContext här metoden körs. |
| SessionId |
Hämtar den String som används för att identifiera den aktuella sessionen. |
| SupportingTokens |
Hämtar en ICollection<T> av typen SecurityToken. |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetCallbackChannel<T>() |
Hämtar en kanal till klientinstansen som anropade den aktuella åtgärden. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| SetTransactionComplete() |
Genomför den transaktion som körs just nu. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Händelser
| Name | Description |
|---|---|
| OperationCompleted |
Inträffar när åtgärden har slutförts. |