CallContext.GetData メソッド

CallContext から指定した名前のオブジェクトを取得します。

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

パラメータ

  • name
    呼び出しコンテキストの項目の名前。

戻り値

指定した名前に関連付けられた呼び出しコンテキストのオブジェクト。

例外

例外の種類 条件
SecurityException 直前の呼び出し元に、インフラストラクチャ アクセス許可がありません。

使用例

[Visual Basic, C#, C++] GetData メソッドを使用して、識別のためにリモートの場所に プリンシパル オブジェクトと ID オブジェクト を送信する例を次のコードに示します。サンプルで使用する LogicalCallContextData クラスのコードを表示するには、 ILogicalThreadAffinative インターフェイスのトピックの例を参照してください。サンプルで使用するクライアント クラスのコードを表示するには、 CallContext クラスのトピックの例を参照してください。サンプルで使用するサーバー クラスのコードを表示するには、 RegisterActivatedServiceType クラスのトピックの例を参照してください。

 
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] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

CallContext クラス | CallContext メンバ | System.Runtime.Remoting.Messaging 名前空間