Используя Remoting в 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)
{
...
}
}
И это не красиво и не работает.
Есть хорошее решение для этого?
Примечание: использование одного и того же файла сборки на сервере и клиенте, к сожалению, НЕ вариант.
Любая помощь приветствуется.