C# 使用不同域时出现远程处理问题

C# 使用不同域时出现远程处理问题,c#,remoting,C#,Remoting,我有以下项目: 服务器、客户端、远程对象。客户端执行某些操作,然后将远程对象的代理传递给服务器。在服务器和客户机位于不同的域之前,所有的东西都可以正常工作。现在,当我尝试将结果传递给服务器时,出现了一个异常 mscorlib.dll中发生“System.Runtime.Remoting.RemotingException”类型的未处理异常 其他信息:此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的已注册服务器通道,或者此应用程序没有合适的客户端通道与服务器对话。” 互联网上的一些消息来

我有以下项目: 服务器、客户端、远程对象。客户端执行某些操作,然后将远程对象的代理传递给服务器。在服务器和客户机位于不同的域之前,所有的东西都可以正常工作。现在,当我尝试将结果传递给服务器时,出现了一个异常

mscorlib.dll中发生“System.Runtime.Remoting.RemotingException”类型的未处理异常

其他信息:此远程处理代理没有通道接收器,这意味着服务器没有正在侦听的已注册服务器通道,或者此应用程序没有合适的客户端通道与服务器对话。”

互联网上的一些消息来源说,我需要创建一些额外的频道,但我不知道应该在哪里以及如何创建,因为我已经在服务器和客户端上注册了频道

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

谢谢

听起来像是权限问题。您如何托管远程处理对象?您如何跨域进行身份验证?关于auth可能面临的一些问题

默认情况下,TCP客户机通道使用客户机进程运行时使用的用户标识对自身进行身份验证。通过设置域、用户名和密码属性以指定替代标识,可以指定替代标识


您在频道属性上指定了正确的凭据(包括域)了吗?

听起来像是权限问题。您如何托管远程处理对象?您如何跨域进行身份验证?关于auth可能面临的一些问题

默认情况下,TCP客户机通道使用客户机进程运行时使用的用户标识对自身进行身份验证。通过设置域、用户名和密码属性以指定替代标识,可以指定替代标识

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

然后传递远程对象的代理 到服务器

你能解释一下吗?这听起来不是个好主意。通常使用代理来调用远程方法(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());

    }
}
然后传递远程对象的代理 到服务器

你能解释一下吗?这听起来不是个好主意。通常使用代理来调用远程方法(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());

    }
}

为什么?该对象继承了MarshalByRefObject,它在同一个域中工作得很好…仅仅因为它继承了MarshalByRefObject,并不意味着它是一个好的设计。好吧,不管怎样,我需要将一些对象传输到服务器,你认为如何使用“好的设计”来做到这一点?我更新了我的答案,以演示一个典型的远程处理应用程序。好的,但问题是如何将此方法的结果返回到服务器。你能这么做吗?为什么?该对象继承了MarshalByRefObject,它在同一个域中工作得很好…仅仅因为它继承了MarshalByRefObject,并不意味着它是一个好的设计。好吧,不管怎样,我需要将一些对象传输到服务器,你认为如何使用“好的设计”来做到这一点?我更新了我的答案,以演示一个典型的远程处理应用程序。好的,但问题是如何将此方法的结果返回到服务器。你能这样做吗?谢谢你的链接,但我担心这篇文章现在太大了,因为我需要尽快解决我的问题。也许你是对的,因为事实证明我有两个不同领域的项目,其中一个很好,第二个不行。也许你知道一些线索或迹象来检查发生了什么?谢谢你的链接,但我担心这篇文章现在太大了,因为我需要尽快解决我的问题。也许你是对的,因为事实证明我有两个不同领域的项目,其中一个很好,第二个不行。也许你知道一些线索或迹象来检查发生了什么?非常感谢。问题解决了。只是坏虫子…对不起。现在我没有任何例外,但对象是空的…非常感谢。问题解决了。只是坏虫子…对不起。现在我没有任何例外,但对象是空的。。。