Проблема с удаленным взаимодействием при использовании разных доменов - PullRequest
2 голосов
/ 18 апреля 2009

У меня есть следующий проект: сервер, клиент, удаленный объект. клиент что-то делает, затем передает прокси удаленного объекта на сервер. Все работает как свойство, пока сервер и клиент не находятся в разных доменах. Теперь, когда я пытаюсь передать результат на сервер, у меня возникает исключение

"Произошло необработанное исключение типа« System.Runtime.Remoting.RemotingException »в mscorlib.dll

Дополнительная информация. Этот удаленный прокси-сервер не имеет приемника каналов, что означает, что либо у сервера нет зарегистрированных каналов сервера, которые прослушивают, либо у этого приложения нет подходящего клиентского канала для связи с сервером. "

некоторые источники в Интернете говорят, что мне нужно создать какой-то дополнительный канал, но я не знаю, где и как мне это сделать, потому что у меня еще есть регистрация на сервере и клиенте.

Info:
server - domain 2
client - domain 1
remote object - domain 1

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 апреля 2009

затем передайте прокси удаленного объекта на сервер

Вы можете это объяснить? Это не похоже на хорошую идею. Обычно прокси используется для вызова удаленных методов (RPC). Передача прокси обратно на сервер не имеет смысла. Конечно, это может работать в некоторых сценариях, но это только добавляет ненужные осложнения.

Если вы хотите передать объект, создайте отдельный класс данных и передайте его в качестве параметра удаленному методу.

Common.dll

[Serializable]
public class Data
{
    int a;
    int b;
}
[Serializable]
public class ResultData
{
    int c;
}
public interface IServerInterface
{
    ResultData DoSomething(Data data);
}

Server.dll

public class ServerObject : MarshalByRefObject, IServerInterface
{
    public ResultData DoSomething(Data data)
    {
        // do some work on the server
        return new ResultData();
    }
}

Client.exe

class Program
{
    static void Main(string[] args)
    {
        IServerInterface proxy = CreateProxy();
        ResultData result = proxy.DoSomething(new Data());

    }
}
0 голосов
/ 18 апреля 2009

Звучит как проблема с разрешениями для меня. Как вы размещаете свои удаленные объекты? Как вы проходите аутентификацию в разных доменах? Вот достойная статья о некоторых проблемах, с которыми вы можете столкнуться при аутентификации.

Из этой статьи ...

По умолчанию клиентский канал TCP идентифицирует себя с помощью идентификатора пользователя, под которым выполняется клиентский процесс. Вы можете указать альтернативный идентификатор, задав свойства домена, имени пользователя и пароля, чтобы указать альтернативный идентификатор

Вы указали правильные учетные данные (включая домен) в свойствах своего канала?

...