Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
3 / 3 / 0
Регистрация: 31.01.2010
Сообщений: 36

Клиент-серверное приложение выдает ошибку по части безопасности

05.01.2011, 23:05. Показов 3319. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Заранее прошу прощения, если выражаюсь неясно или неточно, с удаленным взаимодействием работать еще не приходилось.
Решил попробовать создать клиент-серверное приложение (некий аналог чата для двух человек). Для этого создал удаленный объект, к которому обращаются и клиент, и сервер. По идее, клиент изменяет переменную и через делегат удаленного объекта вызывает функцию для вывода этой переменной на экран на сервере, аналогично сервер вызывает через делегат удаленного объекта функцию для вывода на клиенте.
Код компилируется, но при запуске при добавлении метода в делегат вылетает ошибка:
Сериализация для типа System.DelegateSerializationHolder и производных от него типов (например, System.DelegateSerializationHolder) на этому уровне безопасности запрещена.
Код сервера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using RemoteObject;
 
namespace RemoteServer
{
    public class Program
    {
        public static RemoteObject.RemoteObject sample;
        static void Main(string[] args)
        {
            HttpChannel c = new HttpChannel(32469);
            ChannelServices.RegisterChannel(c, false);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.RemoteObject), "RemoteMsgObj.soap", WellKnownObjectMode.Singleton);
            object RemoteObj = Activator.GetObject(typeof(RemoteObject.RemoteObject), "http://127.0.0.1:32469/RemoteMsgObj.soap");
            sample = (RemoteObject.RemoteObject)RemoteObj;
            try
            {
                sample.AddPassiveReceiver(Visualise); //Здесь вылетает ошибка
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.WriteLine();
            }
            Thread thr = new Thread(WaitText);
            thr.Start();
        }
 
        public static void Visualise(string msg)
        {
            Console.WriteLine(msg);
        }
 
        public static void WaitText()
        {
            //...
        }
    }
}
Код удаленного объекта:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace RemoteObject
{
    public class RemoteObject: MarshalByRefObject
    {
        public string activeMessage;
        public string passiveMessage;
 
        public RemoteObject()
        {
            activeMessage = "";
            passiveMessage = "";
        }
 
        public delegate void ActiveMessageReceive(string msg);
        public delegate void PassiveMessageReceive(string msg);
        public ActiveMessageReceive actmesres;
        public PassiveMessageReceive pasmesres;
 
        
        public void AddActiveReceiver(ActiveMessageReceive clientmethod)
        {
            actmesres = clientmethod;
        }
 
        public void AddPassiveReceiver(PassiveMessageReceive clientmethod)
        {
            pasmesres = clientmethod;
        }
        public void SendMessageToPassive()
        {
            if (pasmesres != null)
            {
                pasmesres(activeMessage);
            }
        }
 
        public void SendMessageToActive()
        {
            if (actmesres != null)
            {
                actmesres(passiveMessage);
            }
        }
    }
}
Можно ли что-то сделать, чтобы этот код заработал?
Вложения
Тип файла: zip RemoteServer.zip (41.0 Кб, 31 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2011, 23:05
Ответы с готовыми решениями:

Клиент-серверное приложение на сокетах. Код выдает исключение
Здравствуйте! Пытаюсь разобраться с сокетами, на словах вроде все понятно, но чет собрать что-то более менее рабочее не получается нашел...

Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент
Добрый день всем. Проблема заключается в следующем: Есть клиент-серверное приложение, хочу реализовать своего рода защиту, чтобы при...

Клиент-серверное приложение. Сервер - ПК, клиент - телефон (Android)
Здравствуйте, решил для обучения написать программу для выключения ПК с телефона, используя компонент TIdTCPServer. Подскажите, как...

7
3 / 3 / 0
Регистрация: 31.01.2010
Сообщений: 36
06.01.2011, 19:44  [ТС]
Решено. Достаточно было в конфиг добавить вот это:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="http">
          <clientProviders>
            <formatter ref="binary" />
          </clientProviders>
          <serverProviders>
            <formatter ref="soap" typeFilterLevel="Full" />
            <formatter ref="binary" typeFilterLevel="Full" />
          </serverProviders>
        </channel>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>
1
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
02.02.2012, 02:55
У меня была аналогичная проблема. После внесения изменений в конфиг Exeption поменялось на
TargetInvocationException. У тебя такого не возникало?
0
3 / 3 / 0
Регистрация: 31.01.2010
Сообщений: 36
02.02.2012, 09:02  [ТС]
Цитата Сообщение от silicium Посмотреть сообщение
У меня была аналогичная проблема. После внесения изменений в конфиг Exeption поменялось на
TargetInvocationException. У тебя такого не возникало?
Нет, с таким не сталкивался.
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
02.02.2012, 12:47
А у тебя события код обработчиков событий выполняется на серверной стороне?
0
3 / 3 / 0
Регистрация: 31.01.2010
Сообщений: 36
02.02.2012, 12:50  [ТС]
Не помню, давно этим не занимался. Кажется, код выполнялся и на клиенте, и на сервере.
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
02.02.2012, 12:58
потому, как решить проблему с TargetInvocationException помогло банальное копирование всех исполняемых модулей и библиотек в одну папку. После чего делегат успешно сериализовался и утёк выполняться на сервер. Клиенту ни ответа, ни привета
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
18.02.2012, 01:06
Решено: Чтобы делегат не утекал на сервер - его надо создавать в объекте, наследуемом от MarshalByRef
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2012, 01:06
Помогаю со студенческими работами здесь

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что сервер(клиент) не отвечает в течении...

Клиент-серверное приложение
Использую простой найденный сервер. Там есть строка принимающая данные: bytes_read = recv(*it, buf, 8, 0); ..клиент, соответственно...

Клиент-серверное приложение
Здравствуйте, есть задача написать простенькое клиент-серверное приложение на Silverlight или WPF которое перкидывает файлы с клиента на...

Клиент-серверное приложение
Клиент записывает текст в файл и отправляет его серверу. сервер записывает данный текст в обратном порядке записывает в файл и отправляет...

Клиент-серверное приложение
Всем драсти!!!! Поставили такую задачу. написать клиент-серверное приложение для обслуживания банковских переводов.....незнаю как и с чего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru