powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / опыты в NET Remoting
10 сообщений из 10, страница 1 из 1
опыты в NET Remoting
    #34604904
Новичок1917
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил попробовать свои силы в сабжевой технологии, сделал пример из одной статьи и получился облом...Может быть кто-то поможет понять почему?

Сервер:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// Server.cs

using System;
using System.Runtime.Remoting;

namespace Server
{
  class Server
  {
    [STAThread]
    static void Main(string[] args)
    {
      RemotingConfiguration.Configure("Server.exe.config");

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

Передаваемый класс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// TestObject.cs

using System;

namespace TestObject
{
  public class Test: MarshalByRefObject
  {
    public string GetAppName()
    {
      return AppDomain.CurrentDomain.FriendlyName;
    }
  }
}

Клиент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// Client.cs
using System;
using System.Runtime.Remoting;
using TestObject;

namespace Client
{
  class Client
  {
    [STAThread]
    static void Main(string[] args)
    {
      RemotingConfiguration.Configure("Client.exe.config");

      Test test = new Test();
      Console.WriteLine(test.GetAppName());
    }
  }
}

Теперь файлы конфигураций
Сервер

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<configuration>
  <system.runtime.remoting>
    <application name="RemotingTest">
      <service>
        <wellknown 
          mode="SingleCall" 
          type="TestObject.Test, TestObject" 
          objectUri="Test.rem" />
      </service>
      <channels>
        <channel ref="tcp" port="8008" />
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

Клиент
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<configuration>
  <system.runtime.remoting>
    <application>
      <client>
        <wellknown 
          type="TestObject.Test, TestObject" 
          url="tcp://localhost:8008/RemotingTest/Test.rem" />
      </client>
    </application>
  </system.runtime.remoting>
</configuration>

Автор утверждает, что на выходе должны получить строку 'Server.exe', типа передача объекта на сервер произошла...А у меня все время Client...В чем может быть загвоздка? Может в каких то сетевых настройках?
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34605318
Новичок1917
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ok...
А как бы диагностировать в чем проблема заключается?
Может быть какими-то программными средствами можно определить, что например серверная часть не запустилась, или в клиентской косяки, или в состыковке непосредственно...
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34605324
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Test test = new Test();
Как думаешь, какой и где объект создастся?
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34606172
Новичок1917
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот в статье утверждается, что
так как мы в начале делаем вот это:
RemotingConfiguration.Configure("Client.exe.config");

то объект создастся удаленно, а мы получим только ссылку...

PS: Я только начинаю изучать, так что сильно не пинайте...
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34606260
Рекомендую делать не xml-конфигурацией, а создавать всё в коде. Так понятнее, в случае чего, в каком точно месте не сработает.
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34606748
Никогда не делай в коде, а только в конф. файле, т.к. иначе не сможеш хостить свой объект в IIS.
Инструмент для проверки - всё ли Ок с сервером - это SoapSuds.exe.
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34606984
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новичок1917Ну вот в статье утверждается, что
так как мы в начале делаем вот это:
RemotingConfiguration.Configure("Client.exe.config");

то объект создастся удаленно, а мы получим только ссылку...

PS: Я только начинаю изучать, так что сильно не пинайте...

Покажи-ка статью :)
И попробуй так:
Код: plaintext
1.
2.
3.
4.
RemotingConfiguration.Configure(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath, false);
string objectUrl = RemotingConfiguration.GetRegisteredWellKnownClientTypes()[0].ObjectUrl;

Test test = Activator.GetObject(typeof(Test), objectUrl) as Test;
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34607294
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч Новичок1917Ну вот в статье утверждается, что
так как мы в начале делаем вот это:
RemotingConfiguration.Configure("Client.exe.config");

то объект создастся удаленно, а мы получим только ссылку...

PS: Я только начинаю изучать, так что сильно не пинайте...

Покажи-ка статью :)
И попробуй так:
Код: plaintext
1.
2.
3.
4.
RemotingConfiguration.Configure(ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath, false);
string objectUrl = RemotingConfiguration.GetRegisteredWellKnownClientTypes()[0].ObjectUrl;

Test test = Activator.GetObject(typeof(Test), objectUrl) as Test;

Не обязательно использовать Activator(хотя подругому и не сделать, если через интерфейс), но для ознакомления вполне достаточно предложенного способа автором, только он "по ходу" c конфингом перемудрил. Или ссылку на серверную сборку на клиенте не сделал, х.з.
А так вполне себе работает
Как пример
сервер
Код: plaintext
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.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;


namespace RM
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpChannel och = new HttpChannel(4000);
            ChannelServices.RegisterChannel(och,false);
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(TestObject), "Test", WellKnownObjectMode.Singleton);
            Console.WriteLine("Press Enter to exit");
            Console.ReadLine();
        }

    }
}



Удаленный объект
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;

namespace RM
{
      public class TestObject: MarshalByRefObject
    {
        public string GetAppName()
        {
            return "Дурень";
        }
        //public void Configure()
        //{
        //    RemotingConfiguration.Configure("RM.exe.config",true);
        //}
    }
}
клиент
Код: plaintext
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.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RM;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;

namespace RM_user
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            HttpChannel ch = new HttpChannel(0);
            ChannelServices.RegisterChannel(ch, false);
            RemotingConfiguration.RegisterWellKnownClientType(typeof(RM.TestObject), "http://localhost:4000/Test");
            TestObject test = new TestObject();
            Console.WriteLine(test.GetAppName());

        }
    }
}
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34607842
Новичек1917
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уф...Разобрался...
Косяк был на поверхности как обычно...
В статье автор утверждал, что в конфиге тег
wellknown type имеем след формат: "namespace.type,namespace"
на деле все оказалось немножко не так...
ссылку на статью обязательно скину чуть позже :)
Спасибо всем за участие....

PS:Полностью согласен, что в коде конфигурацию стоит писать разве что для проверки...
...
Рейтинг: 0 / 0
опыты в NET Remoting
    #34609083
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МлекопитающееНикогда не делай в коде, а только в конф. файле, т.к. иначе не сможеш хостить свой объект в IIS.
Инструмент для проверки - всё ли Ок с сервером - это SoapSuds.exe.

Ха-ха, там можно делать, если все работает.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / опыты в NET Remoting
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]