BaseChannelObjectWithProperties BaseChannelObjectWithProperties BaseChannelObjectWithProperties BaseChannelObjectWithProperties Class

定义

提供信道对象的基实现,该对象要向其属性公开字典接口。Provides a base implementation of a channel object that exposes a dictionary interface to its properties.

public ref class BaseChannelObjectWithProperties abstract : System::Collections::IDictionary
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public abstract class BaseChannelObjectWithProperties : System.Collections.IDictionary
type BaseChannelObjectWithProperties = class
    interface IDictionary
    interface ICollection
    interface IEnumerable
Public MustInherit Class BaseChannelObjectWithProperties
Implements IDictionary
继承
BaseChannelObjectWithPropertiesBaseChannelObjectWithPropertiesBaseChannelObjectWithPropertiesBaseChannelObjectWithProperties
派生
属性
实现

示例

   [PermissionSet(SecurityAction::Demand, Name="FullTrust")]
   private ref class LoggingServerChannelSink: public BaseChannelObjectWithProperties, public IServerChannelSink
   {
   private:
      IServerChannelSink^ nextSink2;
      bool bEnabled2;

   public:
      LoggingServerChannelSink()
         : nextSink2( nullptr ), bEnabled2( true )
      {}

      LoggingServerChannelSink( IServerChannelSink^ localNextSink )
         : BaseChannelObjectWithProperties()
      {
         nextSink2 = localNextSink;
      }

      virtual ServerProcessing ProcessMessage( IServerChannelSinkStack^ sinkStack, IMessage^ requestMsg, ITransportHeaders^ requestHeaders, Stream^ requestStream, [Out]IMessage^% responseMsg, [Out]ITransportHeaders^% responseHeaders, [Out]Stream^% responseStream ) = IServerChannelSink::ProcessMessage
      {
         if ( bEnabled2 )
         {
            Console::WriteLine( "----------Request Headers-----------" );
            
            Console::WriteLine( "{0}:{1}", CommonTransportKeys::IPAddress,
               requestHeaders[ CommonTransportKeys::IPAddress ] );
            Console::WriteLine( "{0}:{1}", CommonTransportKeys::ConnectionId,
               requestHeaders[ CommonTransportKeys::ConnectionId ] );
            Console::WriteLine( "{0}:{1}", CommonTransportKeys::RequestUri,
               requestHeaders[ CommonTransportKeys::RequestUri ] );
         }

         sinkStack->Push( this, nullptr );
         ServerProcessing processing = nextSink2->ProcessMessage( sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream );
         switch ( processing )
         {
            case ServerProcessing::Complete:
               sinkStack->Pop( this );
               break;

            case ServerProcessing::OneWay:
               sinkStack->Pop( this );
               break;

            case ServerProcessing::Async:
               sinkStack->Store( this, nullptr );
               break;
         }
         return processing;
      }

      virtual void AsyncProcessResponse( IServerResponseChannelSinkStack^ sinkStack, Object^ /*state*/, IMessage^ msg, ITransportHeaders^ headers, Stream^ stream1 )
      {
         sinkStack->AsyncProcessResponse( msg, headers, stream1 );
      }

      virtual Stream^ GetResponseStream( IServerResponseChannelSinkStack^ /*sinkStack*/, Object^ /*state*/, IMessage^ /*msg*/, ITransportHeaders^ /*headers*/ )
      {
         return nullptr;
      }

      property IServerChannelSink^ NextChannelSink 
      {
         virtual IServerChannelSink^ get()
         {
            return nextSink2;
         }
      }
   };

   [PermissionSet(SecurityAction::Demand, Name="FullTrust")]
   public ref class LoggingServerChannelSinkProvider: public IServerChannelSinkProvider
   {
   private:
      IServerChannelSinkProvider^ next2;

   public:
      LoggingServerChannelSinkProvider()
         : next2( nullptr )
      {}

      LoggingServerChannelSinkProvider( IDictionary^ /*properties*/, ICollection^ /*providerData*/ ){}

      virtual void GetChannelData( IChannelDataStore^ /*channelData*/ ){}

      virtual IServerChannelSink^ CreateSink( IChannelReceiver^ channel1 )
      {
         IServerChannelSink^ localNextSink = nullptr;
         if ( next2 != nullptr )
                  localNextSink = next2->CreateSink( channel1 );

         return gcnew LoggingServerChannelSink( localNextSink );
      }

      property IServerChannelSinkProvider^ Next 
      {
         virtual IServerChannelSinkProvider^ get()
         {
            return next2;
         }

         virtual void set( IServerChannelSinkProvider^ value )
         {
            next2 = value;
         }
      }
   };
}
   [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
   public class LoggingServerChannelSinkProvider : IServerChannelSinkProvider
   {
      private IServerChannelSinkProvider next2 = null;
      public LoggingServerChannelSinkProvider(IDictionary properties, ICollection providerData)
      {
      }
      public void GetChannelData(IChannelDataStore channelData)
      {
      }
      public IServerChannelSink CreateSink(IChannelReceiver channel1)
      {
         IServerChannelSink localNextSink = null;
         if (next2 != null)
            localNextSink = next2.CreateSink(channel1);
         return new LoggingServerChannelSink(localNextSink);
      }
      public IServerChannelSinkProvider Next
      {
         get
         {
            return next2;
         }
         set
         {
            next2 = value;
         }
      }
   }
   [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
   internal class LoggingServerChannelSink : BaseChannelObjectWithProperties, IServerChannelSink
   {
      private IServerChannelSink nextSink2 = null;
      private bool bEnabled2 = true;
      public LoggingServerChannelSink(IServerChannelSink localNextSink) : base()
      {
         nextSink2 = localNextSink;
      }
      public ServerProcessing ProcessMessage(   IServerChannelSinkStack sinkStack,
   IMessage requestMsg,
   ITransportHeaders requestHeaders,
   Stream requestStream,
   out IMessage responseMsg,
   out ITransportHeaders responseHeaders,
   out Stream responseStream
)
      {
         if (bEnabled2)
         {
            Console.WriteLine("----------Request Headers-----------");
            Console.WriteLine( CommonTransportKeys.IPAddress + ":" +
               requestHeaders[CommonTransportKeys.IPAddress]);
            Console.WriteLine( CommonTransportKeys.ConnectionId + ":" +
               requestHeaders[CommonTransportKeys.ConnectionId]);
            Console.WriteLine( CommonTransportKeys.RequestUri + ":" +
               requestHeaders[CommonTransportKeys.RequestUri]);

         }
         sinkStack.Push(this, null);
         ServerProcessing processing =
            nextSink2.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg,
            out responseHeaders, out responseStream);

         switch (processing)
         {
            case ServerProcessing.Complete :
            {
               sinkStack.Pop(this);
               break;
            }
            case ServerProcessing.OneWay:
            {
               sinkStack.Pop(this);
               break;
            }
            case ServerProcessing.Async:
            {
               sinkStack.Store(this, null);
               break;
            }
         }
         return processing;
      }
      public void AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, Object state,
         IMessage msg, ITransportHeaders headers, Stream stream1)
      {
         sinkStack.AsyncProcessResponse(msg, headers, stream1);
      }
      public Stream GetResponseStream(IServerResponseChannelSinkStack sinkStack, Object state,
         IMessage msg, ITransportHeaders headers)
      {
         return null;
      }
      public IServerChannelSink NextChannelSink
      {
         get
         {
            return nextSink2;
         }
      }
   }
 <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
 Public Class LoggingServerChannelSinkProvider
    Implements IServerChannelSinkProvider 
    Private next2 As IServerChannelSinkProvider = Nothing
    
    Public Sub New(properties As IDictionary, providerData As ICollection)
    End Sub 'New
    
    Public Sub GetChannelData(channelData As IChannelDataStore) _ 
                                Implements IServerChannelSinkProvider.GetChannelData
    End Sub 'GetChannelData
    
    Public Function CreateSink(channel1 As IChannelReceiver) As IServerChannelSink _ 
                                      Implements IServerChannelSinkProvider.CreateSink
       Dim localNextSink As IServerChannelSink = Nothing
       If Not (next2 Is Nothing) Then
          localNextSink = next2.CreateSink(channel1)
       End If
       Return New LoggingServerChannelSink(localNextSink)
    End Function 'CreateSink
    
    Public Property [Next]() As IServerChannelSinkProvider Implements _ 
                                                      IServerChannelSinkProvider.Next
       Get
          Return next2
       End Get
       Set
          next2 = value
       End Set
    End Property
 End Class 'LoggingServerChannelSinkProvider
 
 <PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _ 
 Friend Class LoggingServerChannelSink
    Inherits BaseChannelObjectWithProperties
    Implements IServerChannelSink 
    Private nextSink2 As IServerChannelSink = Nothing
    Private bEnabled2 As Boolean = True
    
    Public Sub New(localNextSink As IServerChannelSink)
       MyBase.new()
       nextSink2 = localNextSink
    End Sub 'New
    
   Public Function ProcessMessage(   ByVal sinkStack As IServerChannelSinkStack, _
       ByVal requestMsg As IMessage, _
       ByVal requestHeaders As ITransportHeaders, _
       ByVal requestStream As Stream, _
       <Out> ByRef responseMsg As IMessage, _
       <Out> ByRef responseHeaders As ITransportHeaders, _
       <Out> ByRef responseStream As Stream _
    ) As ServerProcessing _ 
       Implements IServerChannelSink.ProcessMessage
       If bEnabled2 Then
          Console.WriteLine("----------Request Headers-----------")
          Console.WriteLine(CommonTransportKeys.IPAddress.ToString() + ":" + _ 
                               requestHeaders(CommonTransportKeys.IPAddress).ToString())
       Console.WriteLine(CommonTransportKeys.ConnectionId.ToString() + ":" + _ 
                               requestHeaders(CommonTransportKeys.ConnectionId).ToString())
       Console.WriteLine(CommonTransportKeys.RequestUri.ToString() + ":" + _ 
                               requestHeaders(CommonTransportKeys.RequestUri).ToString())
       End If
       sinkStack.Push(Me, Nothing)
       Dim processing As ServerProcessing = _ 
                                    nextSink2.ProcessMessage _ 
                (sinkStack, requestMsg, requestHeaders, requestStream, responseMsg, responseHeaders, responseStream)
       
       Select Case processing
          Case ServerProcessing.Complete
                sinkStack.Pop(Me)
          Case ServerProcessing.OneWay
                sinkStack.Pop(Me)
          Case ServerProcessing.Async
                sinkStack.Store(Me, Nothing)
       End Select
       Return processing
    End Function 'ProcessMessage
    
    Public Sub AsyncProcessResponse(sinkStack As IServerResponseChannelSinkStack, _ 
            state As Object, msg As IMessage, headers As ITransportHeaders, stream1 As Stream) _ 
                                     Implements IServerChannelSink.AsyncProcessResponse
       sinkStack.AsyncProcessResponse(msg, headers, stream1)
    End Sub 'AsyncProcessResponse
    
    Public Function GetResponseStream(sinkStack As IServerResponseChannelSinkStack, _ 
                state As Object, msg As IMessage, headers As ITransportHeaders) As Stream _ 
                                     Implements IServerChannelSink.GetResponseStream
       Return Nothing
    End Function 'GetResponseStream
    
    Public ReadOnly Property NextChannelSink() As IServerChannelSink _ 
                                        Implements IServerChannelSink.NextChannelSink
       Get
          Return nextSink2
       End Get
    End Property

    Public Overrides ReadOnly Property Properties() As Collections.IDictionary _ 
                Implements IServerChannelSink.Properties
       Get
return nothing		
       End Get
    End Property
 End Class 'LoggingServerChannelSink

注解

BaseChannelObjectWithPropertiesBaseChannelWithPropertiesBaseChannelSinkWithProperties的基类。BaseChannelObjectWithProperties is the base class for BaseChannelWithProperties and BaseChannelSinkWithProperties.

BaseChannelWithPropertiesBaseChannelSinkWithProperties可用作提供命名属性的通道和信道接收器的基类。BaseChannelWithProperties and BaseChannelSinkWithProperties can be used as the base classes for channels and channel sinks that provide named properties.

BaseChannelObjectWithProperties处理要求通道对象的属性的复杂任务。BaseChannelObjectWithProperties handles the complex task of asking a channel object for its properties.

此类在类级别建立链接要求和继承要求。This class makes a link demand and an inheritance demand at the class level. 当直接调用方或派生类没有基础结构权限时,将引发。SecurityExceptionA SecurityException is thrown when either the immediate caller or the derived class does not have infrastructure permission. 有关安全要求的详细信息, 请参阅链接要求继承要求For details about security demands, see Link Demands and Inheritance Demands.

继承者说明

当从BaseChannelObjectWithProperties继承时,必须Keys重写属性和Item[Object]属性。When you inherit from BaseChannelObjectWithProperties, you must override the Keys property and the Item[Object] property.

构造函数

BaseChannelObjectWithProperties() BaseChannelObjectWithProperties() BaseChannelObjectWithProperties() BaseChannelObjectWithProperties()

初始化 BaseChannelObjectWithProperties 类的新实例。Initializes a new instance of the BaseChannelObjectWithProperties class.

属性

Count Count Count Count

获取与该信道对象关联的属性的数目。Gets the number of properties associated with the channel object.

IsFixedSize IsFixedSize IsFixedSize IsFixedSize

获取一个值,该值指示可以输入到信道对象中的属性的数目是否是固定的。Gets a value that indicates whether the number of properties that can be entered into the channel object is fixed.

IsReadOnly IsReadOnly IsReadOnly IsReadOnly

获取一个值,该值指示信道对象中的属性集合是否是只读的。Gets a value that indicates whether the collection of properties in the channel object is read-only.

IsSynchronized IsSynchronized IsSynchronized IsSynchronized

获取一个值,该值指示信道对象属性的字典是否同步。Gets a value that indicates whether the dictionary of channel object properties is synchronized.

Item[Object] Item[Object] Item[Object] Item[Object]

在派生类中重写时,获取或设置与指定键关联的属性。When overridden in a derived class, gets or sets the property that is associated with the specified key.

Keys Keys Keys Keys

当在派生类中重写时,获取与信道对象属性关联的键的 ICollectionWhen overridden in a derived class, gets a ICollection of keys that the channel object properties are associated with.

Properties Properties Properties Properties

获取与信道对象关联的信道属性的 IDictionaryGets a IDictionary of the channel properties associated with the channel object.

SyncRoot SyncRoot SyncRoot SyncRoot

获取一个对象,该对象用于同步对 BaseChannelObjectWithProperties 的访问。Gets an object that is used to synchronize access to the BaseChannelObjectWithProperties.

Values Values Values Values

获取与信道对象关联的属性值的 ICollectionGets a ICollection of the values of the properties associated with the channel object.

方法

Add(Object, Object) Add(Object, Object) Add(Object, Object) Add(Object, Object)

引发 NotSupportedExceptionThrows a NotSupportedException.

Clear() Clear() Clear() Clear()

引发 NotSupportedExceptionThrows a NotSupportedException.

Contains(Object) Contains(Object) Contains(Object) Contains(Object)

返回一个值,该值指示信道对象是否包含与指定键关联的属性。Returns a value that indicates whether the channel object contains a property that is associated with the specified key.

CopyTo(Array, Int32) CopyTo(Array, Int32) CopyTo(Array, Int32) CopyTo(Array, Int32)

引发 NotSupportedExceptionThrows a NotSupportedException.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

确定指定的对象是否等于当前对象。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

返回 IDictionaryEnumerator,它枚举与该信道对象关联的所有属性。Returns a IDictionaryEnumerator that enumerates over all the properties associated with the channel object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

作为默认哈希函数。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

获取当前实例的 TypeGets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

创建当前 Object 的浅表副本。Creates a shallow copy of the current Object.

(Inherited from Object)
Remove(Object) Remove(Object) Remove(Object) Remove(Object)

引发 NotSupportedExceptionThrows a NotSupportedException.

ToString() ToString() ToString() ToString()

返回表示当前对象的字符串。Returns a string that represents the current object.

(Inherited from Object)

显式界面实现

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

返回 IEnumerator,它枚举与信道对象关联的所有属性。Returns a IEnumerator that enumerates over all the properties that are associated with the channel object.

扩展方法

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

IEnumerable 的元素强制转换为指定的类型。Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

根据指定类型筛选 IEnumerable 的元素。Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

启用查询的并行化。Enables parallelization of a query.

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable)

IEnumerable 转换为 IQueryableConverts an IEnumerable to an IQueryable.

安全性

SecurityPermission
用于处理基础结构代码。For operating with infrastructure code. 要求值: InheritanceDemand;权限值:InfrastructureDemand value: InheritanceDemand; Permission value: Infrastructure

适用于