我开始使用 .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}
是代理...我不知道我在这里做错了什么。