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 セキュリティ:
- SecurityPermission (インフラストラクチャ コードを操作するために必要なアクセス許可)要求値: SecurityAction.LinkDemand; アクセス許可値: SecurityPermissionFlag.Infrastructure
参照
CallContext クラス | CallContext メンバ | System.Runtime.Remoting.Messaging 名前空間