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();
}
}
}
теперь зная 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
/*
Для работы приложения, конфигурирующего 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();
}
}
}
Но все равно ничего не изменилось.
Подскажите пожалуйста что не так. Или где этот флаг блин найти . Спасибо за внимание.
Здравствуйте, 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;
}
}
}
Вот ту я что-то не понял ((. В конфигурации сервера у меня указано что объект доступен по адресу RemotingTest/Test.rem то есть как она может быть не верна. Ее же не надо создавать заранее. Тем более вроде iss сервер тут не учавствует.
И еще вопрос — а какие проблемы с удаленным взаимодействием возникают из-за брадмауеров? И как их обойти.
...
_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
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
Нет вопрос был не в том. У меня тоже все работает когда localhost или 127.0.0.1, но вот когда я пробую получить объект из удаленной машины через интернет то тут вот ничего не работает((.
Здравствуйте, _Lito, Вы писали:
_L>Здравствуйте, Peter Fleischer, Вы писали:
_L>Нет вопрос был не в том. У меня тоже все работает когда localhost или 127.0.0.1, но вот когда я пробую получить объект из удаленной машины через интернет то тут вот ничего не работает((.
Здравствуйте, Peter Fleischer, Вы писали:
PF>могу только в июне на своем сервере проврить
Да тут кстати вопрос наверно не в ремотинге а просто у провайдеров стоят брадмауеры а они ни хрена не дают пройти. Трассировать если по ип то доходит до провайдера и все.