.NET Remoting ile ilgili garip bir sorun yaşıyoruz. Temelde, biz ChannelServices.RegisterChannel()
iki TcpChannels kaydeden bir sunucu var: . NET Kanalları kendi başlarına çevirmeyi deneyin.
- Bir bağlantı noktasını dinleyen Diğer bir bağlantı noktasını dinleyen 50000
- 15000.
sunucu ile iletişim kurabilir. Biz URI
ile
Activator.GetObject()
arayarak sunucudan bir nesneyi almak "tcp: // serverip: 50000/objectname"
ve düzgün çalıştığı, istemci bağlantı noktasında sunucuya bağlanır 50000 ve nesneyi alır. Biz o nesne üzerinde yöntemleri çağırmadan başladığınızda
Ancak, port 50000 üzerinde kanala bağlantı bırakıldığında ve yeni bir bağlantı otomatik olarak liman 15000 üzerinde kanala yapılır. Bu, 15000 numaralı bağlantı noktasında trafiği istemediğimizden bizim için gerçek bir sorun teşkil ediyor çünkü bu kanal, sunucudaki bağlantı noktası 50000 kanalıyla aynı ağ bağdaştırıcısına bağlı olmayabilir veya bu bağlantı noktası güvenlik duvarında açık olmayabilir. Remoting doğal olarak başarısızlık çağrıları. İstemci bağlantı noktası 15000 veya hangi IP onu dinler üzerinde sunucudaki başka bir kanal var olduğu bizim kodunda hiçbir bilgiye sahip, henüz kendisine bağlanmaya çalışırsanız beri
Bu bizim için çok garip.
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, "[email protected]" + m_tcpPort.ToString());
:
Bu herhangi bir Yardım büyük takdir,
Teşekkür, Casper
Bu sunucu kanallarından biri, genellikle port 50000 üzerinde bir tane kurar koddur
Bu, genellikle 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.
numaralı bağlantı noktasında diğer sunucu kanalını kuran koddur.
Bu, ilk sunucu kanalına bağlanan istemci kod, port 50000 genellikle var biridir:
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 + "/[email protected]" + port);
App.config dosyasında herhangi bir kanal yapılandırmanız varsa, bunu sorunuza ekleyin. –
Yanıtladığınız için teşekkür ederiz. Koddaki tüm kurulumlar için app.config yapılandırması yoktur. Bu koda şu soruyu ekledim. – Casper