2010-03-19 133 views
3

我正在开发一个.NET应用程序,它将同时拥有WinForms和Silverlight客户端。虽然大部分代码都在服务器中,但我还需要在客户端有相当多的逻辑,并且我希望保持客户端库代码相同。.NET和Silverlight应用程序之间的共享WCF客户端代码?

从我到目前为止所了解的情况来看,我需要有两个不同的项目类型,一个类库和一个Silverlight类库,并将这些文件从一个项目链接到另一个项目。这看起来很蹩脚,但它适用于简单的代码。

我的问题,不过,是由svcutil.exe的产生访问WCF服务的代码是从由slsvcutil.exe生成的代码不同,Silverlight的代码是使用.NET实际不符一:当我尝试将类导入到.NET中时,System.ServiceModel.Channel类遇到一些问题。

以前有人做过类似的事吗?我究竟做错了什么?

回答

2

不幸的是,从Silverlight 3和.NET 3.5sp1开始,就没有二进制兼容性。您必须共享文件,并维护两个独立的库。

然而,Silverlight 4和.NET 4将提供某种程度的二进制兼容性。根据您在客户端使用的程序集,您可以在Silverlight和Windows Forms中使用相同的组件。

+0

但是,即使没有二进制兼容性,Silverlight库是不是.NET的子集?在这种情况下,我的Silverlight代码是不是也可以在.NET 3.5下编译? – 2010-03-19 18:56:33

+1

这不是一个严格的子集,所以没有。 :-(我通常使用部分类和预处理器指令来解决这个问题,尽管如此。 – 2010-03-19 20:28:15

+0

谢谢Alun,我正在寻找的东西。 – 2010-03-20 15:30:04

0

不要在不同客户端之间共享一个代理客户端 - 为每个客户端生成代理。

您可以重复使用添加的项目之间的数据类作为链接您描述的方法。如果在代理中创建了新版本的类,那么您可以编辑生成的代理代码文件并删除类定义。当你编译它时,每个客户端(Windows应用程序和silverlight)都会有自己的编译类库版本,但它们都来自相同的源代码。

2

我知道现在提供解决方案为时已晚,但也是我的问题,我找到了Portable Class Libraries。这是您的问题的完美解决方案。

+0

是啊,我已经使用它很长一段时间了,伟大的产品! – 2012-07-19 17:00:07

相关问题