OperationContext Klas

Definitie

Biedt toegang tot de uitvoeringscontext van een servicemethode.

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)
Overname
OperationContext
Implementeringen

Voorbeelden

In het volgende codevoorbeeld wordt de Current eigenschap en GetCallbackChannel methode gebruikt om het kanaal terug te krijgen naar de aanroeper vanuit een methode. Alle methoden in dit voorbeeld zijn methoden in één richting, waardoor de service en de client onafhankelijk van elkaar kunnen communiceren. In dit geval verwacht de voorbeeldclienttoepassing slechts één retouroproep voordat deze wordt afgesloten, maar een andere client, bijvoorbeeld een Windows Forms client, kan een willekeurig aantal oproepen van de service ontvangen.

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

De volgende client implementeert het SampleDuplexHelloCallback om het callback-bericht te ontvangen. Het geïmporteerde callback-contract is niet dezelfde naam als het contract in de service, vanwege het gebruik van de Name eigenschap in het vorige voorbeeld. Houd er rekening mee dat de client geen aannames doet over of of of het een callback kan ontvangen; de server callback is volledig onafhankelijk van de uitgaande aanroep van de client.

Note

Zie voor een voorbeeld dat gebruikmaakt van de OperationContext klasse in een clientscenario 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

Opmerkingen

Gebruik de OperationContext bewerking vanuit een service om toegang te krijgen tot de huidige uitvoeringsomgeving voor bewerkingen. In het bijzonder wordt de bewerkingscontext gebruikt voor toegang tot callbackkanalen in duplexservices, om extra statusgegevens op te slaan over gedeelten van de bewerkingen, en om toegang te krijgen tot binnenkomende berichtkoppen en eigenschappen, en om uitgaande berichtkoppen en eigenschappen toe te voegen.

Zie Extensible Objects voor meer informatie over het gebruik van extensies voor het opslaan van statusgegevens.

De OperationContext eigenschap heeft de volgende eigenschappen en methoden.

Constructors

Name Description
OperationContext(IContextChannel)

Initialiseert een nieuw exemplaar van de OperationContext klasse die gebruikmaakt van de opgegeven IContextChannel in een clienttoepassing.

Eigenschappen

Name Description
Channel

Hiermee haalt u het kanaal op dat is gekoppeld aan het huidige OperationContext object.

ClaimsPrincipal

Hiermee haalt u de op claims gebaseerde principal op die aan de bewerking is gekoppeld.

Current

Hiermee haalt u de uitvoeringscontext voor de huidige thread op of stelt u deze in.

EndpointDispatcher

Hiermee wordt de eindpunt-dispatcher voor het eindpunt ophaalt of ingesteld om het te inspecteren of te wijzigen.

Extensions

Hiermee haalt u de verzameling service-extensies op uit de huidige berichtcontext.

HasSupportingTokens

Hiermee wordt een waarde opgehaald die aangeeft of het binnenkomende bericht ondersteuningstokens heeft.

Host

Hiermee haalt u het ServiceHost voor het huidige serviceobject op.

IncomingMessageHeaders

Hiermee haalt u de binnenkomende berichtkoppen voor de OperationContext.

IncomingMessageProperties

Hiermee haalt u de berichteigenschappen op voor het binnenkomende bericht in de OperationContext.

IncomingMessageVersion

Hiermee wordt de binnenkomende SOAP-berichtversie voor de OperationContext.

InstanceContext

Hiermee haalt u het InstanceContext object op dat het huidige service-exemplaar beheert.

IsUserContext

Deze eigenschap is bedoeld voor systeemgebruik en mag niet door gebruikers worden aangeroepen.

OutgoingMessageHeaders

Hiermee haalt u de uitgaande berichtkoppen voor de actieve OperationContext.

OutgoingMessageProperties

Hiermee worden de berichteigenschappen voor het uitgaande bericht in het actieve bericht opgeslagen OperationContext.

RequestContext

Hiermee haalt u de RequestContext implementatie voor deze methode op of stelt u deze in.

ServiceSecurityContext

Hiermee haalt u de ServiceSecurityContext uitvoering van deze methode op of stelt u deze in.

SessionId

Hiermee haalt u de String gebruikte op om de huidige sessie te identificeren.

SupportingTokens

Hiermee haalt u een ICollection<T> type SecurityTokenop.

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetCallbackChannel<T>()

Hiermee haalt u een kanaal op naar het clientexemplaren dat de huidige bewerking heeft aangeroepen.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
SetTransactionComplete()

Voert de momenteel uitgevoerde transactie door.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

gebeurtenis

Name Description
OperationCompleted

Treedt op wanneer de bewerking is voltooid.

Van toepassing op