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
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:
- SecurityPermission for operating with infrastructure code. Demand value: SecurityAction.LinkDemand; Permission value: SecurityPermissionFlag.Infrastructure
See Also
CallContext Class | CallContext Members | System.Runtime.Remoting.Messaging Namespace