0

我开始使用 .net 远程处理,阅读教程和解释,现在在网上至少看到了三个示例,它们看起来都与我的代码相似。我找不到错误的原因。(RemotingException 未处理“试图在暴露 'HES.MyProcess' 的对象上调用在类型 'System.IFormattable' 上声明的方法。”)我尝试修复此问题六个小时,但未能成功查找互联网,阅读大量内容页数...也许你们可以帮助我?

MarshalByRefObject 派生类如下所示:

public class MyProcess : MarshalByRefObject, IMyProcess
{
    //public System.Diagnostics.Process process {get; set;}

    public MyProcess()
    {
        // TODO: Complete member initialization
      //  this.process = Process.GetCurrentProcess();
    }

    public string GetProcessId()
    { Console.WriteLine("I'm on..");
    return "test";
     //  return this.process.Id;
    }
}

我的界面如下所示:

interface IMyProcess
{

     string GetProcessId();

}

我的服务器如下所示:

namespace HES
{
public class HES_Starter
{
public static void Main(string[] args)
{

        // using TCP protocol
        TcpChannel channel = new TcpChannel(_port);
        //second value is for security settings
        ChannelServices.RegisterChannel(channel, false);
        Console.WriteLine("HES Server here... on PID: " +    Process.GetCurrentProcess().Id);

        //Type, objectUri to access the object remotely, mode
        RemotingConfiguration.RegisterWellKnownServiceType(
          typeof(HES.MyProcess), "HESProcess",
          WellKnownObjectMode.Singleton);


        Console.ReadLine();
}
}
}

最后我的客户是这样的:

namespace Service_Provider
{
public class Program
{
public static void Main(string[] args)
{

        TcpChannel channel = new TcpChannel();
        //second value is for security settings
        ChannelServices.RegisterChannel(channel, false);

        Console.WriteLine("HES Client here...");

        IMyProcess remoteProcess = (IMyProcess)Activator.GetObject(
                typeof(IMyProcess), "tcp://localhost:8050/HESProcess");


        Console.WriteLine(remoteProcess);
        Console.WriteLine(remoteProcess.GetProcessId());
        Console.ReadLine();
    }
}
}

有人知道我做错了什么吗?我的意思是从异常中我可以看到客户端知道该对象是“HES”命名空间中的远程对象。在调试中我可以看到该对象

remoteProcess = {System.Runtime.Remoting.Proxies.__TransparentProxy} 

是代理...我不知道我在这里做错了什么。

4

0 回答 0