using System;
using System.Collections;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("press any key plus enter to create server: ");
if (Console.ReadLine().Length > 0)
{
var serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 17017;
props["name"] = "tcp server";
var channel = new TcpChannel(props, null, serverProv);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Server), "server",
WellKnownObjectMode.Singleton);
Console.WriteLine("Server created");
}
else
{
ChannelServices.RegisterChannel(new TcpChannel(), false);
Server server = (Server)Activator.GetObject(typeof(Server), "tcp://localhost:17017/server");
Client client = new Client();
client.Connect(server);
}
Console.ReadLine();
}
}
class Server : MarshalByRefObject
{
//private List<Client> cilents = new List<Client>();
public event EventHandler ClientedAdded;
public void AddClient(Client client)
{
if (ClientedAdded != null)
{
foreach (EventHandler handler in ClientedAdded.GetInvocationList())
{
handler.BeginInvoke(this, EventArgs.Empty, null, null);
}
}
}
}
class Client : MarshalByRefObject
{
public void Connect(Server server)
{
server.ClientedAdded += server_ClientedAdded;
server.AddClient(this);
}
void server_ClientedAdded(object sender, EventArgs e)
{
Console.WriteLine("server_ClientedAdded");
}
}
}
Сначала запустите exe и создайте сервер.Затем запустите исполняемый файл и создайте клиент, нажав Введите напрямую.
Исключение будет выдано handler.BeginInvoke(this, EventArgs.Empty, null, null);
.
Этот удаленный прокси-сервер не имеет приемника каналов, что означает, что либо на сервере нет зарегистрированных каналов сервера, которые прослушивают, либо у этого приложения нет подходящего клиентского канала для связи с сервером.
Так как это исправить?
Я нашел похожий вопрос на http://www.codeguru.com/forum/showthread.php?t=420124. Автор предоставил решение, но оно слишком короткое для меня, чтобы понять.