IChannelReceiver 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供接收者通道所需的功能和屬性。
public interface class IChannelReceiver : System::Runtime::Remoting::Channels::IChannel
public interface IChannelReceiver : System.Runtime.Remoting.Channels.IChannel
[System.Runtime.InteropServices.ComVisible(true)]
public interface IChannelReceiver : System.Runtime.Remoting.Channels.IChannel
type IChannelReceiver = interface
interface IChannel
[<System.Runtime.InteropServices.ComVisible(true)>]
type IChannelReceiver = interface
interface IChannel
Public Interface IChannelReceiver
Implements IChannel
- 衍生
- 屬性
- 實作
範例
ref class MyCustomChannel: public IChannelReceiver
{
private:
ChannelDataStore^ myChannelData;
int myChannelPriority;
// Set the 'ChannelName' to 'MyCustomChannel'.
String^ myChannelName;
// Implement 'ChannelName' property.
TcpListener^ myTcpListener;
int myPortNo;
bool myListening;
Thread^ myThread;
public:
MyCustomChannel()
: myChannelPriority( 25 ), myChannelName( "tcp" ), myListening( false )
{}
MyCustomChannel( int portNo )
{
myPortNo = portNo;
array<String^>^myURI = gcnew array<String^>(1);
myURI[ 0 ] = String::Concat( Dns::Resolve( Dns::GetHostName() )->AddressList[ 0 ], ":", portNo );
// Store the 'URI' in 'myChannelDataStore'.
myChannelData = gcnew ChannelDataStore( myURI );
// Create 'myTcpListener' to listen at the 'myPortNo' port.
myTcpListener = gcnew TcpListener( myPortNo );
// Create the thread 'myThread'.
myThread = gcnew Thread( gcnew ThreadStart( myTcpListener, &TcpListener::Start ) );
this->StartListening( nullptr );
}
property String^ ChannelName
{
virtual String^ get()
{
return myChannelName;
}
}
property int ChannelPriority
{
virtual int get()
{
return myChannelPriority;
}
}
virtual String^ Parse( String^ myUrl, [Out]String^% objectURI )
{
Regex^ myRegex = gcnew Regex( "/",RegexOptions::RightToLeft );
// Check for '/' in 'myUrl' from Right to left.
Match^ myMatch = myRegex->Match(myUrl);
// Get the object URI.
objectURI = myUrl->Substring( myMatch->Index );
// Return the channel url.
return myUrl->Substring( 0, myMatch->Index );
}
// Implementation of 'IChannelReceiver' interface.
property Object^ ChannelData
{
virtual Object^ get()
{
return myChannelData;
}
}
// Create and send the object URL.
virtual array<String^>^ GetUrlsForUri( String^ objectURI )
{
array<String^>^myString = gcnew array<String^>(1);
myString[ 0 ] = String::Concat( Dns::Resolve( Dns::GetHostName() )->AddressList[ 0 ], "/", objectURI );
return myString;
}
// Start listening to the port.
virtual void StartListening( Object^ data )
{
if ( myListening == false )
{
myTcpListener->Start();
myListening = true;
Console::WriteLine( "Server Started Listening !!!" );
}
}
// Stop listening to the port.
virtual void StopListening( Object^ data )
{
if ( myListening == true )
{
myTcpListener->Stop();
myListening = false;
Console::WriteLine( "Server Stopped Listening !!!" );
}
}
};
class MyCustomChannel : IChannelReceiver
{
private ChannelDataStore myChannelData;
private int myChannelPriority = 25;
// Set the 'ChannelName' to 'MyCustomChannel'.
private string myChanneName = "tcp";
// Implement 'ChannelName' property.
private TcpListener myTcpListener;
private int myPortNo;
private bool myListening = false;
private Thread myThread;
public MyCustomChannel(int portNo)
{
myPortNo = portNo;
string [] myURI = new string[1];
myURI[0] = Dns.Resolve(Dns.GetHostName()).AddressList[0] + ":" +
portNo.ToString();
// Store the 'URI' in 'myChannelDataStore'.
myChannelData = new ChannelDataStore(myURI);
// Create 'myTcpListener' to listen at the 'myPortNo' port.
myTcpListener = new TcpListener(myPortNo);
// Create the thread 'myThread'.
myThread = new Thread(new ThreadStart(myTcpListener.Start));
this.StartListening(null);
}
public string ChannelName
{
get
{
return myChanneName;
}
}
public int ChannelPriority
{
get
{
return myChannelPriority;
}
}
public string Parse(string myUrl, out string objectURI)
{
Regex myRegex = new Regex("/",RegexOptions.RightToLeft);
// Check for '/' in 'myUrl' from Right to left.
Match myMatch = myRegex.Match(myUrl);
// Get the object URI.
objectURI = myUrl.Substring(myMatch.Index);
// Return the channel url.
return myUrl.Substring(0,myMatch.Index);
}
// Implementation of 'IChannelReceiver' interface.
public object ChannelData
{
get
{
return myChannelData;
}
}
// Create and send the object URL.
public string[] GetUrlsForUri(string objectURI)
{
string[] myString = new string[1];
myString[0] = Dns.Resolve(Dns.GetHostName()).AddressList[0]
+ "/" + objectURI;
return myString;
}
// Start listening to the port.
public void StartListening(object data)
{
if(myListening == false)
{
myTcpListener.Start();
myListening = true;
Console.WriteLine("Server Started Listening !!!");
}
}
// Stop listening to the port.
public void StopListening(object data)
{
if(myListening == true)
{
myTcpListener.Stop();
myListening = false;
Console.WriteLine("Server Stopped Listening !!!");
}
}
}
Class MyCustomChannel
Implements IChannelReceiver
Private myChannelData As ChannelDataStore
Private myChannelPriority As Integer = 25
' Set the 'ChannelName' to 'MyCustomChannel'.
Private myChanneName As String = "tcp"
' Implement 'ChannelName' property.
Private myTcpListener As TcpListener
Private myPortNo As Integer
Private myListening As Boolean = False
Private myThread As Thread
Public Sub New(ByVal portNo As Integer)
myPortNo = portNo
Dim myURI(0) As String
myURI(0) = Dns.Resolve(Dns.GetHostName()).AddressList(0).ToString() + ":" + _
portNo.ToString()
' Store the 'URI' in 'myChannelDataStore'.
myChannelData = New ChannelDataStore(myURI)
' Create 'myTcpListener' to listen at the 'myPortNo' port.
myTcpListener = New TcpListener(myPortNo)
' Create the thread 'myThread'.
myThread = New Thread(New ThreadStart(AddressOf myTcpListener.Start))
Me.StartListening(Nothing)
End Sub
Public ReadOnly Property ChannelName() As String Implements IChannelReceiver.ChannelName
Get
Return myChanneName
End Get
End Property
Public ReadOnly Property ChannelPriority() As Integer _
Implements IChannelReceiver.ChannelPriority
Get
Return myChannelPriority
End Get
End Property
Public Function Parse(ByVal myUrl As String, ByRef objectURI As String) As String _
Implements IChannelReceiver.Parse
Dim myRegex As New Regex("/", RegexOptions.RightToLeft)
' Check for '/' in 'myUrl' from Right to left.
Dim myMatch As Match = myRegex.Match(myUrl)
' Get the object URI.
objectURI = myUrl.Substring(myMatch.Index)
' Return the channel url.
Return myUrl.Substring(0, myMatch.Index)
End Function 'Parse
' Implementation of 'IChannelReceiver' interface.
Public ReadOnly Property ChannelData() As Object Implements IChannelReceiver.ChannelData
Get
Return myChannelData
End Get
End Property
' Create and send the object URL.
Public Function GetUrlsForUri(ByVal objectURI As String) As String() _
Implements IChannelReceiver.GetUrlsForUri
Dim myString(0) As String
myString(0) = Dns.Resolve(Dns.GetHostName()).AddressList(0).ToString() + "/" + objectURI
Return myString
End Function 'GetUrlsForUri
' Start listening to the port.
Public Sub StartListening(ByVal data As Object) Implements IChannelReceiver.StartListening
If myListening = False Then
myTcpListener.Start()
myListening = True
Console.WriteLine("Server Started Listening !!!")
End If
End Sub
' Stop listening to the port.
Public Sub StopListening(ByVal data As Object) Implements IChannelReceiver.StopListening
If myListening = True Then
myTcpListener.Stop()
myListening = False
Console.WriteLine("Server Stopped Listening !!!")
End If
End Sub
End Class
備註
通道的接收端必須公開 IChannelReceiver 介面。
屬性
ChannelData |
取得通道特定資料。 |
ChannelName |
取得通道的名稱。 (繼承來源 IChannel) |
ChannelPriority |
取得通道的優先權。 (繼承來源 IChannel) |
方法
GetUrlsForUri(String) |
傳回 URI 的所有 URL 陣列。 |
Parse(String, String) |
將物件 URI 傳回為輸出參數,並將目前通道的 URI 值傳回為傳回值。 (繼承來源 IChannel) |
StartListening(Object) |
指示目前通道開始接聽要求。 |
StopListening(Object) |
指示目前通道停止接聽要求。 |