Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие 2-х remoting серверов 
:(
    Опции темы
1111111111
Дата 10.6.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Изучаю remoting. Мне необходимо организовать связь между двумя remoting серверами. Клиент передает данные на обработку 1 серверу, который далее передает их на 2 сервер. Второй обработав возвращает... 
Не получается правильно организовать взаимодействие между 1 и 2 сервером? 

Клиент
Код


using System;
using System.Data;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Activation;

#endregion

namespace TestRemoting
{
  class Program
  {
     static void Main(string[] args)
     {
    ChannelServices.RegisterChannel(new TcpClientChannel(),false);
        TestMetod obj = (TestMetod)Activator.GetObject(typeof(TestMetod), "tcp://localhost:8086/Hi");
            
             DataTable __table1 = new DataTable("Test");

            __table1.Columns.Add("ID", typeof(int));
            __table1.Columns.Add("TEXT", typeof(string));

            DataRow __row = __table1.NewRow();
            __row["ID"] = 1;
            __row["TEXT"] = "Строка1";
            __table1.Rows.Add(__row);

            __row = __table1.NewRow();
            __row["ID"] = 2;
            __row["TEXT"] = "Строка2";
            __table1.Rows.Add(__row);

            DataTable __table2 = obj._Test_table(__table1);
            
            Console.ReadLine();
     }
  }

  public class TestMetod : System.MarshalByRefObject
  {
    public DataTable _Test_table(DataTable __table)
    {
      return __table;
    }
  }
}



Сервер1
Код

using System;
using System.Collections;
using System.Data;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace TestRemoting
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("СЕРВЕР1");
            
            TcpServerChannel tcpChannel = new TcpServerChannel(8086);
            ChannelServices.RegisterChannel(tcpChannel,false);
            
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(TestMetod), "Hi", WellKnownObjectMode.SingleCall);
            System.Console.WriteLine("Enter для остановки сервера");
           
            System.Console.ReadLine();
        }
    }
    
    public class TestMetod : System.MarshalByRefObject
    {
        public DataTable _Test_table(DataTable __table)
        {
          
            ChannelServices.RegisterChannel(new TcpClientChannel(), false);

            TestMetod2 obj2 = (TestMetod2)Activator.GetObject(typeof(TestMetod2), "tcp://localhost:9086/Hi");

            if (obj2 == null)
            {
                Console.WriteLine("сервер не найден");
                return __table;
            }
            
            return obj2._Test_table(__table);
        }
    }

    public class TestMetod2 : System.MarshalByRefObject
    {
        public DataTable _Test_table(DataTable __table)
        {
            return __table;
        }
    }
}
  

Сервер2
Код

using System;
using System.Collections;
using System.Data;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

namespace TestRemoting
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpServerChannel tcpChannel = new TcpServerChannel(9086);

            Console.WriteLine("СЕРВЕР2");
            
            ChannelServices.RegisterChannel(tcpChannel,false);
            
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(TestMetod2), "Hi", WellKnownObjectMode.SingleCall);
            System.Console.WriteLine("Enter для остановки СЕРВЕРа2");
          
            System.Console.ReadLine();
        }
    }

    public class TestMetod2 : System.MarshalByRefObject
    {
        public DataTable _Test_table(DataTable __table)
        {
            Console.WriteLine("Вызов таблицы был обработан успешно.");

            DataRow __row = __table.NewRow();
            __row["ID"] = 3;
            __row["TEXT"] = "Новая строка";
            __table.Rows.Add(__row);

            __row = __table.NewRow();
            __row["ID"] = 4;
            __row["TEXT"] = "Новая строка";
            __table.Rows.Add(__row);
            
            return __table;
        }
    }
}


PM MAIL   Вверх
appshneg
  Дата 20.6.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.4.2009

Репутация: нет
Всего: нет



Я тоже недавно начал интересоваться .NET Remoting, и как я считаю все классы типа TestMothod, TestMethod2 лучше запихнуть в отдельную сборку dll и в каждом проекте давать на её ссылку. smile 
PM MAIL   Вверх
1111111111
Дата 30.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.11.2007

Репутация: нет
Всего: нет



Я согласен что нужно в отдельную DLL. Код привел для примера. Меня интересует как правильно организовать взаимодействие 2-х серверов? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.