2009-04-17 36 views
2

我有以下项目: 服务器,客户端,远程对象。客户端做了一些事情,然后将远程对象的代理传递给服务器。所有的东西都有效,直到服务器和客户端在不同的域中。现在,当我试图通过导致服务器我有一个例外使用不同的域时进行远程处理的问题

“类型‘System.Runtime.Remoting.RemotingException’未处理的异常在mscorlib.dll发生

附加信息:这远程代理服务器没有通道接收器,这意味着服务器没有正在监听的注册服务器通道,或者该应用程序没有合适的客户端通道与服务器通信。“

Internet上的一些消息说,我需要创建一些额外的渠道,但我不知道在哪里,我该怎么做,因为我有服务器和客户端上的频道注册。

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

谢谢

+0

太谢谢你了。问题已经解决了。这只是坏的错误... – mimic 2009-04-18 01:23:02

+0

对不起。现在我没有任何异常,但对象为空... – mimic 2009-04-18 01:32:02

回答

0

听起来像一个权限问题给我。你如何托管你的远程对象?你如何通过域进行身份验证? Here's a decent article关于您可能面临的一些问题。

this article ...

缺省情况下,TCP客户端信道本身与在其下的客户端进程正在运行的用户身份认证。您可以通过设置域,用户名和密码属性来指定替代身份以指定替代身份

您是否在频道属性中指定了正确的凭证(包括域)?

+0

感谢您的链接,但恐怕这篇文章太大,因为我需要尽快解决我的问题。也许你是对的,因为事实证明,我有两个不同领域的项目,其中一个很好,另一个不行。也许你知道一些线索或标志来检查发生了什么? – mimic 2009-04-17 23:47:12

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()); 

    } 
} 
相关问题