C#中的远程处理与版本控制

C#中的远程处理与版本控制,c#,versioning,remoting,C#,Versioning,Remoting,使用C#中的远程处理,我连接到不同的服务器。由于我不断在客户端添加功能,服务器端的服务并不总是最新的 如果我在接口中调用一个方法(在服务器上远程调用该方法),而该方法在服务器端的实现中不存在,我如何解决这个问题 客户端自然崩溃,因为有一个异常我无法捕捉。是的,我可以,但由于我用这种方式调用了许多不同的方法,因此为每种方法添加异常处理将是一件痛苦的事情 我想到的一个“解决方案”是为我的MarshalByRefObject中的每个方法添加一个自定义版本属性。但是我不知道以后调用每个方法时如何使用它。

使用C#中的远程处理,我连接到不同的服务器。由于我不断在客户端添加功能,服务器端的服务并不总是最新的

如果我在接口中调用一个方法(在服务器上远程调用该方法),而该方法在服务器端的实现中不存在,我如何解决这个问题

客户端自然崩溃,因为有一个异常我无法捕捉。是的,我可以,但由于我用这种方式调用了许多不同的方法,因此为每种方法添加异常处理将是一件痛苦的事情

我想到的一个“解决方案”是为我的
MarshalByRefObject
中的每个方法添加一个自定义版本属性。但是我不知道以后调用每个方法时如何使用它。我可以为每个方法添加一个注释/属性,但是如果有一个
if
语句询问版本是否足够新,那将再次是一种痛苦

我考虑的另一种方法是使用继承

public abstract class AbstractServer1 : MarshalByRefObject
{
    public abstract void feature1();
}

public abstract class AbstractServer2 : AbstractServer1
{
    public abstract featureInVersion2();
    public abstract string reallyNewFeature();
}

public class ServerClass1 : AbstractServer1
{
    public void feature1();
}

public class ServerClass2 : ServerClass1, AbstractServer2
{
    public void featureInVersion2();
    public string reallyNewFeature();
}
但这将导致如下结果:

public AbstractServer getRemoteObject(string host, int port)
{
    object obj = Activator.GetObject(typeof(AbstractServer2), "tcp://" + host + ":" + port.ToString() + "/ServiceName");
    if (typeof(obj) == ServerClass1)
    {
        ...
    }
}
这既不美观也不实用

有好的解决办法吗

备注:很遗憾,在服务器和客户端中使用相同的程序集文件不是一个选项


非常感谢您的帮助。

在调用服务器端不存在的函数时,您希望有什么样的行为

它构建了一个代理,用于捕获在调用实现特定接口的对象的成员时发生的所有异常。 您可以在wpf通道或远程处理代理的接口成员上使用它

IMyInterface myService = [...];
IMyInterface myExceptionLoggedService = ExceptionProxyGenerator.Generate<IMyInterface>(myService);
(myExceptionLoggedService  as IExceptionProxy).Error+=(sender,method,exception)=>{
   // do what you want on exception
};
// Use my service :
myExceptionLoggedService.MyExistingFunction();// ok
myExceptionLoggedService.MyNotExistingFunction();// calling the above delegate
IMyInterface myService=[…];
IMyInterface myExceptionLoggedService=ExceptionProxyGenerator.Generate(myService);
(myExceptionLoggedService作为IEExceptionProxy)。错误+=(发送方、方法、异常)=>{
//在例外情况下做你想做的事
};
//使用我的服务:
myExceptionLoggedService.MyExistingFunction();//好啊
myExceptionLoggedService.MyNoteExistingFunction();//呼叫上述代表

您可以重写一点这个类,使其具有您想要的行为(比如不在出错时重新引发异常并返回null-如果函数不返回void-)

您知道为了支持WCF,远程处理已经被弃用了吗?自从.NET 3.0以来?@John:谢谢你的快速回复。嗯,不,我没有:P好的。。。只要看一看MSDN()上的教程,如果我没有完全弄错的话,我的问题将与WCF相同。我遗漏了什么吗?是客户端还是服务器端异常?异常是否涉及任何程序集解决错误?