次の方法で共有


SinkProviderData クラス

シンク プロバイダのシンク プロバイダ データを格納します。

この型のすべてのメンバの一覧については、SinkProviderData メンバ を参照してください。

System.Object
   System.Runtime.Remoting.Channels.SinkProviderData

Public Class SinkProviderData
[C#]
public class SinkProviderData
[C++]
public __gc class SinkProviderData
[JScript]
public class SinkProviderData

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

シンク プロバイダ データは、 <provider> 要素 (テンプレート) 構成ノードに格納されているツリー構造の構成情報です。すべてのシンク プロバイダを構成ファイルから使用する場合、すべてのシンク プロバイダは、プロパティの IDictionary およびこれらの構造の ICollection を受け入れるコンストラクタを持つ必要があります。

使用例

 

   Public Class MySinkProviderData
      Implements IServerChannelSinkProvider
      Private myIServerChannelSinkProviderNew As IServerChannelSinkProvider

      Private myAcceptMode As Boolean = True
      Private myCollectionData As ICollection = Nothing

      Public Sub New()
      End Sub 'New

      Public Sub New(properties As IDictionary, providerData As ICollection)
         Dim myMode As String = CType(properties("mode"), String)
         If String.Compare(myMode, "accept", True) = 0 Then
            myAcceptMode = True
         Else
            If String.Compare(myMode, "reject", True) = 0 Then
               myAcceptMode = False
            End If
         End If
         myCollectionData = providerData
      End Sub 'New

      Public Sub GetChannelData(myLocalChannelData As IChannelDataStore) Implements _
                                       IServerChannelSinkProvider.GetChannelData
      End Sub 'GetChannelData

      Public Function CreateSink(myChannel As IChannelReceiver) As IServerChannelSink Implements _
                                                         IServerChannelSinkProvider.CreateSink
         Dim myIServerChannelSink_nextSink As IServerChannelSink = Nothing
         If Not (myIServerChannelSinkProviderNew Is Nothing) Then
            myIServerChannelSink_nextSink = myIServerChannelSinkProviderNew.CreateSink(myChannel)
         End If
         Dim mySink As New MyIPFilterChannelSink(myAcceptMode, myIServerChannelSink_nextSink)
         ' Create and initialize a new ArrayList.
         Dim myArrayList As New ArrayList()

         ' Add filters.
         Dim mySinkData As SinkProviderData
         For Each mySinkData In  myCollectionData
            ' The SinkProviderData properties are added to the ArrayList.
            myArrayList.Add(mySinkData.Children)
            myArrayList.Add(mySinkData.Name)

            Dim myMaskString As String = CType(mySinkData.Properties("mask"), String)
            Dim myIPString As String = CType(mySinkData.Properties("ip"), String)
            Dim myMachineString As String = CType(mySinkData.Properties("machine"), String)

            Dim mask As IPAddress = Nothing
            Dim ip As IPAddress = Nothing

            If Not (myIPString Is Nothing) Then
               mask = IPAddress.Parse(myMaskString)
               ip = IPAddress.Parse(myIPString)
            Else
               mask = IPAddress.Parse("255.255.255.255")
               ip = Dns.Resolve(myMachineString).AddressList(0)
            End If

            mySink.AddFilter(mask, ip)
         Next mySinkData
         Console.WriteLine("The Count of the ArrayList is  :" + myArrayList.Count.ToString())
         Console.WriteLine("The values in the SinkProviderData collection are:")

         ' Call the PrintValues function to enumerate and print values to the console.
         PrintValues(myArrayList)

         Return mySink
      End Function 'CreateSink

      Public Property [Next]() As IServerChannelSinkProvider Implements _
                                                            IServerChannelSinkProvider.Next
         Get
            Return myIServerChannelSinkProviderNew
         End Get
         Set
            myIServerChannelSinkProviderNew = value
         End Set
      End Property

      Public Property Mode() As FilterMode
         Get
            Return(IIf(myAcceptMode ,FilterMode.Accept ,FilterMode.Reject))
         End Get
         Set(ByVal Value As FilterMode)
             If Value = FilterMode.Accept Then
                 myAcceptMode = Value
             End If
         End Set
      End Property

      Public Shared Sub PrintValues(myList As IEnumerable)
         Dim myEnumerator As IEnumerator = myList.GetEnumerator()
         While myEnumerator.MoveNext()
            Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
         End While
         Console.WriteLine()
      End Sub 'PrintValues
   End Class 'MySinkProviderData
     ' class MySinkProviderData

[C#] 
public class MySinkProviderData : IServerChannelSinkProvider
{
   private IServerChannelSinkProvider myIServerChannelSinkProviderNew;

   private bool myAcceptMode = true;
   private ICollection myCollectionData = null;

   public MySinkProviderData()
   {
   }

   public MySinkProviderData(IDictionary properties, ICollection providerData)
   {
      String myMode = (String)properties["mode"];
      if (String.Compare(myMode, "accept", true) == 0)
         myAcceptMode = true;
      else
         if (String.Compare(myMode, "reject", true) == 0)
         myAcceptMode = false;
      myCollectionData = providerData;
   }

   public void GetChannelData(IChannelDataStore myLocalChannelData)
   {
   }
   public IServerChannelSink CreateSink(IChannelReceiver myChannel)
   {
      IServerChannelSink myIServerChannelSink_nextSink = null;
      if (myIServerChannelSinkProviderNew != null)
         myIServerChannelSink_nextSink = myIServerChannelSinkProviderNew.CreateSink(myChannel);
      MyIPFilterChannelSink mySink = new MyIPFilterChannelSink(myAcceptMode,
                                                   myIServerChannelSink_nextSink);
      // Create and initialize a new ArrayList.
      ArrayList myArrayList = new ArrayList();

      // Add filters.
      foreach (SinkProviderData mySinkData in myCollectionData)
      {
         // The SinkProviderData properties are added to the ArrayList.
         myArrayList.Add(mySinkData.Children);
         myArrayList.Add(mySinkData.Name);

         String myMaskString = (String)mySinkData.Properties["mask"];
         String myIPString = (String)mySinkData.Properties["ip"];
         String myMachineString = (String)mySinkData.Properties["machine"];

         IPAddress mask = null;
         IPAddress ip = null;

         if (myIPString != null)
         {
            mask = IPAddress.Parse(myMaskString);
            ip = IPAddress.Parse(myIPString);
         }
         else
         {
            mask = IPAddress.Parse("255.255.255.255");
            ip = Dns.Resolve(myMachineString).AddressList[0];
         }

         mySink.AddFilter(mask, ip);
      }
      Console.WriteLine("The Count of the ArrayList is  :"+ myArrayList.Count);
      Console.WriteLine("The values in the SinkProviderData collection are:");

      // Call the PrintValues function to enumerate and print values to the console.
      PrintValues( myArrayList );

      return mySink;
   }

   public IServerChannelSinkProvider Next
   {
      get
      {
         return myIServerChannelSinkProviderNew;
      }
      set
      {
         myIServerChannelSinkProviderNew = value;
      }
   }

   public FilterMode Mode
   {
      get
      {
         return (myAcceptMode ? FilterMode.Accept : FilterMode.Reject);
       }
      set
      {
         myAcceptMode = (value == FilterMode.Accept);
      }
   }

   public static void PrintValues( IEnumerable myList )
   {
      IEnumerator myEnumerator = myList.GetEnumerator();
      while ( myEnumerator.MoveNext() )
      Console.Write( "\t{0}", myEnumerator.Current );
      Console.WriteLine();
   }
} // class MySinkProviderData

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

必要条件

名前空間: System.Runtime.Remoting.Channels

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

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

SinkProviderData メンバ | System.Runtime.Remoting.Channels 名前空間