Мастера .NET REMOTING, отзовитесь !!!
От: MegaWolf510  
Дата: 28.02.06 10:27
Оценка:
Господа, уже очень долго мучаюсь с одной проблемой с .NET REMOTING, которая
просто перечёркивает её дальнейшее изучение...

Проблема общая, связанная с тем, что, конечно, легко осуществлять в ремотинг прямую связь, тоесть вызываеть
методы удалённого объекта, но вот как насчёт обратной связи??? когда сам объект активирует событие и вызывает
делегаты клиентов??? Везде в книгах, где я только не смотрел, ничего не написано про мою проблему...
Все обещают, что если напишешь прогу в этом стиле(как в примере), то обязательно будет работать...
В общем, на обратной связи у меня и проблема. Когда в клиентах производится подписание на событие

msg.NewMsg += new NewMsgEventHandler(MessageReceived);

возникает исключение : Type System.DelegateSerializationHolder and the types derived from it (such as System.DelegateSerializationHolder) are not permitted to be deserialized at this security level.

для примера я наклепал код:
(Все сборки со строгим именем, в программах клиент и сервер установил режим полного доверия (Проект->Properties->
Security->Enable ClickOnce Security Settings->This is a full trust application);

1. Sdk.dll:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;

namespace Sdk
{
public delegate void NewMsgEventHandler(string Message);

public class Messager : MarshalByRefObject
{
public event NewMsgEventHandler NewMsg;

public void SendMessage(string msg)
{
NewMsg(msg);
}
}
}

2. Client.exe:
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using Sdk;

namespace Client
{
class Program
{
public static void MessageReceived(string msg)
{
Console.WriteLine("\n"+msg);
}

static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpChannel(0));
RemotingConfiguration.RegisterWellKnownClientType(typeof(Messager), "tcp://localhost:4000/Messager");

Messager msg = new Messager();
msg.NewMsg += new NewMsgEventHandler(MessageReceived);

string message = "";
while (message != "exit")
{
Console.Write("Enter message:");
message = Console.ReadLine();

msg.SendMessage(message);
}
}
}
}

3. Server.exe :
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using Sdk;

namespace Server
{
class Program
{
static void Main(string[] args)
{
TcpChannel channel = new TcpChannel(4000);
ChannelServices.RegisterChannel(channel);

RemotingConfiguration.RegisterWellKnownServiceType(typeof(Messager), "Messager",
WellKnownObjectMode.Singleton);

Console.WriteLine("Type Enter to exit...");
Console.ReadLine();
}
}
}


--------------------------------------------------!!!Очень буду благодарен !!!-----------------------------------



28.02.06 13:32: Перенесено модератором из 'Сети, сокеты, протоколы' — Хитрик Денис
Re: Мастера .NET REMOTING, отзовитесь !!!
От: Chardex Россия  
Дата: 28.02.06 10:39
Оценка:
Здравствуйте, MegaWolf510, Вы писали:

MW>Господа, уже очень долго мучаюсь с одной проблемой с .NET REMOTING, которая

MW>просто перечёркивает её дальнейшее изучение...

MW>Проблема общая, связанная с тем, что, конечно, легко осуществлять в ремотинг прямую связь, тоесть вызываеть

MW>методы удалённого объекта, но вот как насчёт обратной связи??? когда сам объект активирует событие и вызывает
MW>делегаты клиентов??? Везде в книгах, где я только не смотрел, ничего не написано про мою проблему...
MW>Все обещают, что если напишешь прогу в этом стиле(как в примере), то обязательно будет работать...
MW>В общем, на обратной связи у меня и проблема. Когда в клиентах производится подписание на событие


serverProvider.TypeFilterLevel = TypeFilterLevel.Full;


Или через конфиг.

Вообще события совместно с ремоутингом лучше не использовать
Re[2]: Мастера .NET REMOTING, отзовитесь !!!
От: Аноним  
Дата: 28.02.06 10:54
Оценка:
Здравствуйте, Chardex, Вы писали:

C>Здравствуйте, MegaWolf510, Вы писали:


MW>>Господа, уже очень долго мучаюсь с одной проблемой с .NET REMOTING, которая

MW>>просто перечёркивает её дальнейшее изучение...

MW>>Проблема общая, связанная с тем, что, конечно, легко осуществлять в ремотинг прямую связь, тоесть вызываеть

MW>>методы удалённого объекта, но вот как насчёт обратной связи??? когда сам объект активирует событие и вызывает
MW>>делегаты клиентов??? Везде в книгах, где я только не смотрел, ничего не написано про мою проблему...
MW>>Все обещают, что если напишешь прогу в этом стиле(как в примере), то обязательно будет работать...
MW>>В общем, на обратной связи у меня и проблема. Когда в клиентах производится подписание на событие


C>
C>serverProvider.TypeFilterLevel = TypeFilterLevel.Full;
C>


C>Или через конфиг.


C>Вообще события совместно с ремоутингом лучше не использовать


а что использовать вместо событий?
Re[3]: Мастера .NET REMOTING, отзовитесь !!!
От: EugeneZ Украина  
Дата: 28.02.06 11:08
Оценка:
C>>Вообще события совместно с ремоутингом лучше не использовать

А>а что использовать вместо событий?


Pull — модель событий. То есть клиент сам опрашивает состояние сервера через заданный интервал времени.
Re[3]: Мастера .NET REMOTING, отзовитесь !!!
От: Chardex Россия  
Дата: 28.02.06 11:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а что использовать вместо событий?


Стандартные каналы по интернету плохо работают. По сети — вроде нормально. Есть платная библиотека, что-то там Channels, ссылку не смог найти, вот она работала с инетом хорошо. Приходили события даже когда выход в инет был через проксю.
Re[3]: Мастера .NET REMOTING, отзовитесь !!!
От: Ice Dragon Россия  
Дата: 28.02.06 11:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Chardex, Вы писали:


C>>Вообще события совместно с ремоутингом лучше не использовать


А>а что использовать вместо событий?


Вместо них использовать поиск по сайту.
Повторюсь снова:
http://rsdn.ru/Forum/?mid=1592485
Автор: Ice Dragon
Дата: 16.01.06

http://rsdn.ru/Forum/?mid=1599682
Автор: Ice Dragon
Дата: 18.01.06


ещё где-то интересное на эту тему читал, но не найти.
Знание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения. (Бенджамин Франклин)
Re[4]: Мастера .NET REMOTING, отзовитесь !!!
От: VladiCh  
Дата: 28.02.06 11:25
Оценка:
Здравствуйте, Chardex, Вы писали:

C>Здравствуйте, Аноним, Вы писали:


А>>а что использовать вместо событий?


C>Стандартные каналы по интернету плохо работают. По сети — вроде нормально. Есть платная библиотека, что-то там Channels, ссылку не смог найти, вот она работала с инетом хорошо. Приходили события даже когда выход в инет был через проксю.


вот эта?
Здесь в обратную сторону можно также дергать объекты, как и в прямую, т.е. не обязательно мутить с событиями. К тому же multicasting-делегаты нормально отрабатывают безо всяких левых трюков. И через прокси работает, а также можно надежно определять разрыв соединения и к примеру момент перезапуска сервера.
Re[5]: Мастера .NET REMOTING, отзовитесь !!!
От: Chardex Россия  
Дата: 28.02.06 11:28
Оценка:
Здравствуйте, VladiCh, Вы писали:

VC>вот эта?

Именно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.