This topic has not yet been rated - Rate this topic

CallContext.GetData Method

Retrieves an object with the specified name from the CallContext.

[Visual Basic]
Public Shared Function GetData( _
   ByVal name As String _
) As Object
[C#]
public static object GetData(
 string name
);
[C++]
public: static Object* GetData(
 String* name
);
[JScript]
public static function GetData(
   name : String
) : Object;

Parameters

name
The name of the item in the call context.

Return Value

The object in the call context associated with the specified name.

Exceptions

Exception Type Condition
SecurityException The immediate caller does not have infrastructure permission.

Example

[Visual Basic, C#, C++] The following code example demonstrates the use of the GetData method to transmit Principal and Identity Objects to a remote location for identification. To view the code for the LogicalCallContextData class used in this sample, see the example for the ILogicalThreadAffinative interface. To view the code for the client class used in the sample, see the example for the CallContext class. To view the code for the server class used in this sample, see example for the RegisterActivatedServiceType class.

[Visual Basic] 
Imports System
Imports System.Text
Imports System.Runtime.Remoting.Messaging
Imports System.Security.Principal


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 'New

   
   Protected Overrides Sub Finalize()
      Console.WriteLine("Destroyed instance {0} of HelloServiceClass.", instanceNum)
      MyBase.Finalize()
   End Sub 'Finalize
  
   
   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 'HelloServiceClass

[C#] 
using System;
using System.Text;
using System.Runtime.Remoting.Messaging;
using System.Security.Principal;

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 + ".";
   }
}

[C++] 
#using <mscorlib.dll>

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


public __gc class LogicalCallContextData;


public __gc class HelloServiceClass : public MarshalByRefObject 
{
    static int n_instances;
    int instanceNum;

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

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

public:
    String* HelloMethod(String* name) 
    {
        //Extract the call context data
        LogicalCallContextData* data = dynamic_cast<LogicalCallContextData*>(CallContext::GetData(S"test data"));
        IPrincipal* myPrincipal = data->Principal;

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

        // calculate and return result to client    
        return String::Format(S"Hi there {0}.", name);
    }
};

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

.NET Framework Security: 

See Also

CallContext Class | CallContext Members | System.Runtime.Remoting.Messaging Namespace

Did you find this helpful?
(1500 characters remaining)