質問
ぜひ一度見に来てください奇問題です。純リモ.基本的に、サーバの登録につTcpChannelsと ChannelServices.RegisterChannel()
:
- 聴港50000
- その他のオブジェ港15000.
またクライアントを登録TcpChannelるコミュニケーションが取れ、サーバーにコピーします。を取得するオブジェクトからサーバを呼び出し Activator.GetObject()
のURI
"tcp://serverip:50000/objectname"
この作品は細か、クライアント接続のサーバのポート50000のオブジェクトです。
しかし、startメソッドを呼び出すたびにこのオブジェクトへの接続チャネルのポート50000落として、新しい接続のチャネルのポート15000ます。このポーズを現実の問題にしてからない交通ポート15000がこのチャネルあたり拘束されることと同じネットワークアダプターとしてのポート50000のアクチンフィラメントサーバはポートあたりのファイアウォールの原因となるリモ話になります。
これは、非常に奇異に映るから、お客様に関する知識が全くない様コードが存在する他のアクチンフィラメントサーバのポート15000やIPでの話を聞くと、な試みを接続します。
のお役に立てるようにこの協力もよろしくお願い申し上げ,
おかげさ キャスパー
このコードを設定し、一つのサーバーのチャネルは、通常のポート50000:
IDictionary props = new Hashtable();
props["port"] = m_tcpPort;
props["name"] = String.Empty;
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
m_tcpChannel = new TcpServerChannel( props, /*clientProvider,*/ serverProvider );
ChannelServices.RegisterChannel( m_tcpChannel, false );
m_wellKnownObjRef = RemotingServices.Marshal( this, "Server@" + m_tcpPort.ToString() );
このコードを設定するその他のサーバーのチャネルは、通常のポート15000:
IDictionary props = new Hashtable();
props["name"] = String.Empty;
props["port"] = ip.Port;
props["bindTo"] = ip.Address.ToString();
props["timeout"] = REMOTING_TIMEOUT; // Timeout to prevent hung remoting calls.
if (!String.IsNullOrEmpty( machineName ))
{
props["machineName"] = machineName;
}
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
m_channel = new TcpChannel( props, clientProvider, serverProvider );
ChannelServices.RegisterChannel( m_channel, false );
m_objRef = RemotingServices.Marshal( this, QueueName ); // Queuename is a GUID.
このコードは、クライアント接続のサーバーのチャネルを通常はポート50000:
IDictionary props = new Hashtable();
props["port"] = 0;
RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off;
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
m_tcpChannel = new TcpClientChannel(props, clientProvider/*, serverProvider*/);
ChannelServices.RegisterChannel(m_tcpChannel, false );
string address = "tcp://" + profile.RemoteIP + ":" + profile.RemoteTCP;
m_server = (Kernel)Activator.GetObject(typeof(Server), address + "/Server@" + port);
解決
またログイン支援の場合は、Microsoft、どうやら、私たちがやっていることで対応していない。純リモ.のみとさせていただきご登録チャネルの各種AppDomain.どのリモいで返送のURI(文字列オブジェクトクライアントに伝えているのでアクセスできるオブジェクト。ときにはその登録チャネルをサーバー終了の最初のチャンネルができるようにするためのlibsoupおり一致する要求された型に(この例:Tcp).その他の言葉でまいチャンネルが登録します。なケアについてはどのチャネルのクライアント接続します。
解決に導入することによって、現在ご自身のIClientChannelSinkProviderのクライアント側で行われます。を遂行する場合にCreateSink()メソッドの設定を行いますのurlはそのままにしてお客様への接続を作成する場合は、掛け流しです。
他のヒント
かったのでstuggleと"backlinked"ポートなどと思っていただけ発生の場合はサーバーしたい送信などでもイベント-行います。らないといけなかったので常に問題にファイアウォール、切り替えGenuineChannelsっ必要なものだけを購入できるよう少し時代遅れ).