2009-04-17 3 views
2

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

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

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

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

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

Спасибо

+0

Спасибо так много. Проблема решена. Это была просто плохая ошибка ... – mimic

+0

Прошу прощения. Теперь у меня нет исключения, но объект имеет значение null ... – mimic

ответ

0

Звучит как вопрос прав доступа для меня. Как вы размещаете свои удаленные объекты? Как вы аутентифицируетесь по доменам? Here's a decent article по некоторым вопросам, с которыми вы столкнулись бы с помощью auth.

От this article ...

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

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

+0

Спасибо за ссылку, но я боюсь, что эта статья слишком велика, потому что мне нужно как можно скорее решить мою проблему. Возможно, вы правы, потому что, как оказалось, у меня есть 2 проекта с разными доменами, и один из них работает хорошо, второй - нет. Может быть, вы знаете некоторые подсказки или признаки, чтобы проверить, что происходит? – mimic

+0

Какой канал вы используете? –

0

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

Можете ли вы объяснить это? Это не похоже на хорошую идею. Обычно для вызова удаленных методов (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

почему? объект наследует MarshalByRefObject, он отлично работает в одном домене ... – mimic

+0

Просто потому, что он наследует MarshalByRefObject, не делает его хорошим дизайном. –

+1

Хорошо, в любом случае мне нужно перенести какой-то объект на сервер, как вы думаете, чтобы сделать это, используя «хороший дизайн»? – mimic

Смежные вопросы