Remoting - что не так
От: _Lito  
Дата: 17.05.04 21:21
Оценка:
Привет.

Вот код remoting сервера:

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;

using TestObject;

namespace Server
{
    public class Server
    {
        [STAThread]
        static void Main(string [] args)
        {
            RemotingConfiguration.Configure("Server.exe.config");
            
            Console.WriteLine("Server is running. Press Enter to exit");
            Console.ReadLine();
        }
    }
}


а вот файл конфигурации:

<configuration>
    <system.runtime.remoting>
        <application name = "RemotingTest">
            <service>
                <wellknown
                    mode = "SingleCall"
                    type = "TestObject.Test, TestObject"
                    objectUri = "Test.rem" />
            </service>
            <channels>
                <channel ref="tcp" port="888" />
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>



теперь зная IP адрес удаленного компа, на котором запущен этот сервер(и сборка с самим объектом тоже там есть))
запускаем такой вот клиент

using System;
using System.Runtime.Remoting;

using TestObject;

namespace Client
{
    class Client
    {
        [STAThread]
        static void Main(string[] args)
        {
            Test t = (Test)Activator.GetObject(
                typeof(Test), "tcp://81.176.228.122:888/RemotingTest/Test.rem");
            
            Console.WriteLine(t.GetAppName());
            Console.WriteLine((t.Mul(2,3)).ToString());
            Console.ReadLine();
        }
    }


и ничего не работает, пакеты туда идут и до туда доходят, но от туда ниче не возвращается, брадмауер отключал, фаервол тоже потом все включал, но разрешал доступ для server.exe. Пробовал и tcp и http

При этом если написать "tcp://127.0.0.1:888/RemotingTest/Test.rem" — все работает.

В статье http://rsdn.ru/article/dotnet/remouting.xml написано было:
/*
Для работы приложения, конфигурирующего Remoting, необходимо, чтобы в SecurityPermission 
был установлен флаг RemotingConfiguration. Будьте внимательны – в .Net Framework redistributable 
этот флажок по умолчанию не установлен. Настройки защиты нет приложений можно так же задать с 
помощью «Microsoft .NET Framework Wizards» который можно найти в «Programs\Administrative Tools».*/


нигде такого флага в конфигурациях не нашел. Поэтому попробовал добавить как атрибут :

using System;
using System.Runtime.Remoting;
using System.Security.Permissions;

using TestObject;


namespace Server
{
    public class Server
    {
        [STAThread]
                
                //вот тут )))))
        [SecurityPermissionAttribute(SecurityAction.Assert,RemotingConfiguration = true)]
        static void Main(string [] args)
        {
            RemotingConfiguration.Configure("Server.exe.config");
            
                Console.WriteLine("Server is running. Press Enter to exit");
            Console.ReadLine();
        }
    }
}


Но все равно ничего не изменилось.

Подскажите пожалуйста что не так. Или где этот флаг блин найти . Спасибо за внимание.
Re: Remoting - что не так
От: Peter Fleischer Германия www.informtoools.de
Дата: 19.05.04 12:45
Оценка:
Здравствуйте, _Lito, Вы писали:

_L>Привет.


_L>Вот код remoting сервера:


У меня рабоает именно так. 2 замечания:

...
_L> type = "TestObject.Test, TestObject"


Namespace TestObject существует? В нем класс Test существует? Dll TestObject существует?


Класс Test верна построена?

...
_L> {
_L> Test t = (Test)Activator.GetObject(
_L> typeof(Test), "tcp://81.176.228.122:888/RemotingTest/Test.rem");


Папка RemotingTest верна?

Peter
Re[2]: Remoting - что не так
От: _Lito  
Дата: 19.05.04 17:25
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

PF>2 замечания:


1.

_L>> type = "TestObject.Test, TestObject"


PF>Namespace TestObject существует? В нем класс Test существует? Dll TestObject существует? Класс Test верна построена?


dll собрана из такого вот файла и она существует и на сервере и на клиетте
using System;

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

        public int Mul(int a1, int a2)
        {
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName);
                        return a1*a2;
        }
    }
}


2.

_L>> Test t = (Test)Activator.GetObject(typeof(Test), "tcp://81.176.228.122:888/RemotingTest/Test.rem");


PF>Папка RemotingTest верна?


Вот ту я что-то не понял ((. В конфигурации сервера у меня указано что объект доступен по адресу RemotingTest/Test.rem то есть как она может быть не верна. Ее же не надо создавать заранее. Тем более вроде iss сервер тут не учавствует.

И еще вопрос — а какие проблемы с удаленным взаимодействием возникают из-за брадмауеров? И как их обойти.
Re[3]: Remoting - что не так
От: Peter Fleischer Германия www.informtoools.de
Дата: 20.05.04 11:17
Оценка:
Здравствуйте, _Lito, Вы писали:

...

_L>>> Test t = (Test)Activator.GetObject(typeof(Test), "tcp://81.176.228.122:888/RemotingTest/Test.rem");


PF>>Папка RemotingTest верна?


_L>Вот ту я что-то не понял ((. В конфигурации сервера у меня указано что объект доступен по адресу RemotingTest/Test.rem то есть как она может быть не верна. Ее же не надо создавать заранее. Тем более вроде iss сервер тут не учавствует.


_L>И еще вопрос — а какие проблемы с удаленным взаимодействием возникают из-за брадмауеров? И как их обойти.


Я не понимаю, что у тебя ...888/RemotingTest/Test.rem... Для чго там RemotingTest.

У меня бз этого работает прекрасно:

Client.vb

Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp

Imports TestObject

Module Module1

  Sub Main()
    Dim tst As Test = CType(Activator.GetObject(GetType(Test), "tcp://localhost:888/Test.rem"), Test)
    Console.WriteLine(tst.GetAppName)
    Console.WriteLine("Enter - Exit")
    Console.ReadLine()
  End Sub

End Module


Server.vb

Imports System
Imports System.Runtime.Remoting

Module Module1

  Sub Main()
    RemotingConfiguration.Configure("Server.exe.config")
    Console.WriteLine("Enter - Exit")
    Console.ReadLine()
  End Sub

End Module


Server.exe.config

<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown
type="TestObject.Test, RemotingTest"
objectUri="Test.rem"
mode="SingleCall"
/>
</service>
<channels>
<channel ref="tcp server" port="888" />
</channels>
</application>
</system.runtime.remoting>
</configuration>

RemotingText.vb

Imports System

namespace TestObject

Public Class Test
  Inherits MarshalByRefObject

public function GetAppName() as string
            return AppDomain.CurrentDomain.FriendlyName
end function

        public function Mul(a1 as integer, a2 as integer) as integer 
            Console.WriteLine(AppDomain.CurrentDomain.FriendlyName)
                        return a1*a2
end function

End Class

end namespace


процедура перевода:

vbc /t:library /r:System.Web.dll /out:RemotingTest.dll RemotingTest.vb

vbc /r:System.Web.dll /r:RemotingTest.dll /out:Server.exe Server.vb

vbc /r:System.Runtime.Remoting.dll /r:System.dll /r:RemotingTest.dll Client.vb

Все в однй папке!

Firewall надо только окрывать 888 (но точно не знаю).

Peter
Re[4]: Remoting - что не так
От: _Lito  
Дата: 20.05.04 18:00
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

Нет вопрос был не в том. У меня тоже все работает когда localhost или 127.0.0.1, но вот когда я пробую получить объект из удаленной машины через интернет то тут вот ничего не работает((.
Re[5]: Remoting - что не так
От: Peter Fleischer Германия www.informtoools.de
Дата: 20.05.04 18:38
Оценка:
Здравствуйте, _Lito, Вы писали:

_L>Здравствуйте, Peter Fleischer, Вы писали:


_L>Нет вопрос был не в том. У меня тоже все работает когда localhost или 127.0.0.1, но вот когда я пробую получить объект из удаленной машины через интернет то тут вот ничего не работает((.


могу только в июне на своем сервере проврить
Re[6]: Remoting - что не так
От: _Lito  
Дата: 20.05.04 21:51
Оценка:
Здравствуйте, Peter Fleischer, Вы писали:

PF>могу только в июне на своем сервере проврить


Да тут кстати вопрос наверно не в ремотинге а просто у провайдеров стоят брадмауеры а они ни хрена не дают пройти. Трассировать если по ип то доходит до провайдера и все.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.