Condividi tramite


CallContext.GetData(String) Metodo

Definizione

Restituisce un oggetto con il nome specificato da CallContext.

public:
 static System::Object ^ GetData(System::String ^ name);
public static object GetData (string name);
[System.Security.SecurityCritical]
public static object GetData (string name);
static member GetData : string -> obj
[<System.Security.SecurityCritical>]
static member GetData : string -> obj
Public Shared Function GetData (name As String) As Object

Parametri

name
String

Nome dell'elemento nel contesto di chiamata.

Restituisce

Oggetto nel contesto della chiamata associato al nome specificato.

Attributi

Eccezioni

Il chiamante immediato non dispone dell'autorizzazione di infrastruttura.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso del GetData metodo per trasmettere Principal e Identity Objects a una posizione remota per l'identificazione. Per visualizzare il codice per la LogicalCallContextData classe usata in questo esempio, vedere l'esempio per l'interfaccia ILogicalThreadAffinative . Per visualizzare il codice per la classe client usata nell'esempio, vedere l'esempio per la CallContext classe . Per visualizzare il codice per la classe server usata in questo esempio, vedere l'esempio per la RegisterActivatedServiceType classe .

using namespace System;
using namespace System::Text;
using namespace System::Runtime::Remoting::Messaging;
using namespace System::Security::Principal;
using namespace System::Security::Permissions;

ref class LogicalCallContextData;

public ref class HelloServiceClass: public MarshalByRefObject
{
private:
   static int n_instances;
   int instanceNum;

public:
   HelloServiceClass()
   {
      n_instances++;
      instanceNum = n_instances;
      Console::WriteLine(  "{0} has been created.  Instance # = {1}", this->GetType()->Name, instanceNum );
   }

   ~HelloServiceClass()
   {
      Console::WriteLine( "Destroyed instance {0} of HelloServiceClass.", instanceNum );
   }

   [SecurityPermissionAttribute(SecurityAction::Demand, Flags=SecurityPermissionFlag::Infrastructure)]
   String^ HelloMethod( String^ name )
   {
      //Extract the call context data
      LogicalCallContextData^ data = dynamic_cast<LogicalCallContextData^>(CallContext::GetData( "test data" ));
      IPrincipal^ myPrincipal = data->Principal;

      //Check the user identity
      if ( myPrincipal->Identity->Name == "Bob" )
      {
         Console::WriteLine( "\nHello {0}, you are identified!", myPrincipal->Identity->Name );
         Console::WriteLine( data->numOfAccesses );
      }
      else
      {
         Console::WriteLine( "Go away! You are not identified!" );
         return String::Empty;
      }

      // calculate and return result to client    
      return String::Format( "Hi there {0}.", name );
   }
};
using System;
using System.Text;
using System.Runtime.Remoting.Messaging;
using System.Security.Principal;
using System.Security.Permissions;

public class HelloServiceClass : MarshalByRefObject {

   static int n_instances;
   int instanceNum;

   public HelloServiceClass() {
      n_instances++;
      instanceNum = n_instances;
      Console.WriteLine(this.GetType().Name + " has been created.  Instance # = {0}", instanceNum);
   }

   ~HelloServiceClass() {
      Console.WriteLine("Destroyed instance {0} of HelloServiceClass.", instanceNum);
   }

   public String HelloMethod(String name) {

      //Extract the call context data
      LogicalCallContextData data = (LogicalCallContextData)CallContext.GetData("test data");
      IPrincipal myPrincipal = data.Principal;

      //Check the user identity
      if(myPrincipal.Identity.Name == "Bob") {
         Console.WriteLine("\nHello {0}, you are identified!", myPrincipal.Identity.Name);
         Console.WriteLine(data.numOfAccesses);
      }
      else {
         Console.WriteLine("Go away! You are not identified!");
         return String.Empty;
      }

        // calculate and return result to client	
      return "Hi there " + name + ".";
   }
}
Imports System.Text
Imports System.Runtime.Remoting.Messaging
Imports System.Security.Principal
Imports System.Security.Permissions

Public Class HelloServiceClass
   Inherits MarshalByRefObject
   
   Private Shared n_instances As Integer
   Private instanceNum As Integer  
   
   Public Sub New()
      n_instances += 1
      instanceNum = n_instances
      Console.WriteLine(Me.GetType().Name + " has been created.  Instance # = {0}", instanceNum)
   End Sub

   
   Protected Overrides Sub Finalize()
      Console.WriteLine("Destroyed instance {0} of HelloServiceClass.", instanceNum)
      MyBase.Finalize()
   End Sub
  
   <PermissionSet(SecurityAction.LinkDemand)> _
   Public Function HelloMethod(name As [String]) As [String]
      
      'Extract the call context data
      Dim data As LogicalCallContextData = CType(CallContext.GetData("test data"), LogicalCallContextData)
      Dim myPrincipal As IPrincipal = data.Principal
      
      'Check the user identity
      If myPrincipal.Identity.Name = "Bob" Then
         Console.WriteLine()
         Console.WriteLine("Hello {0}, you are identified!", myPrincipal.Identity.Name)
         Console.WriteLine(data.numOfAccesses)
      Else
         Console.WriteLine("Go away! You are not identified!")
         Return [String].Empty
      End If
      
      ' calculate and return result to client	
      Return "Hi there " + name + "."
   End Function 'HelloMethod

End Class

Si applica a