.NET远程处理,版本控制和接口

时间:2009-02-17 19:50:04

标签: .net remoting interface versioning

我有一个使用2.0框架的大型.NET远程项目。服务器的API通过接口公开,共享类型包含在与客户端应用程序共享的程序集中。

我有一些方法接受基类的数组,这些基类有许多不同的类继承它。

例如,我有基类“Vehicle”,它有两个继承自它的类,说“Car”和“Truck”。

我有一个方法IFoo.Save(列出车辆)

稍后我添加了一个继承自名为“Motorcycle”的“Vehicle”的新类,只有服务器或客户端具有新的共享程序集,但不是两者都有。其中一个将无法解析新类型。

您认为处理这种情况的最灵活方式是什么?

编辑:这是Windows服务中托管的Windows窗体客户端应用程序和远程服务器。

3 个答案:

答案 0 :(得分:2)

发布更新。对于这样的事情,你总是必须拥有相同版本的所有东西。也许考虑ClickOnce让每个人都保持最新状态。

答案 1 :(得分:2)

ClickOnce是一个很好的解决方案。

或者使用与类无关的Web服务方法。传递可以重构为对象的版本化二进制流式字典。如果它很重要,请编写对象重构内容以处理 前向和后向兼容性,否则只需拒绝具有“未来”版本号的数据。

Web服务非常适合解耦。字典非常适​​合传递一般数据。基于程序集的类版本控制非常糟糕(即使最新版本的.Net中的序列化更改)也会导致疯狂......

答案 2 :(得分:1)

这似乎更像是一个部署问题。服务器和客户端必须能够访问共享程序集的相同版本。您的策略将取决于平台 - 是此网络还是表单?

执行此操作的一种方法是强制客户端使用特定版本的共享程序集,并为该客户端提供该程序集的交付方法。