.NET和Silverlight应用程序之间的共享WCF客户端代码?

时间:2010-03-19 18:42:52

标签: c# .net silverlight wcf

我正在开发一个既有WinForms又有Silverlight客户端的.NET应用程序。虽然大多数代码都在服务器中,但我也需要在客户端中拥有相当多的逻辑,并且我希望保持客户端库代码相同。

到目前为止,我需要知道两种不同的项目类型,一个类库和一个Silverlight类库,并将文件从一个项目链接到另一个项目。这似乎有点蹩脚,但它适用于简单的代码。

我的问题是, SVCUtil.exe 生成的访问WCF服务的代码与 slsvcutil.exe 生成的代码不同, Silverlight代码实际上与.NET不兼容:当我尝试将类导入.NET时,我遇到了System.ServiceModel.Channel类的一些问题。

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

您可以使用所描述的 add as link 方法在项目之间重用数据类。如果在代理中创建了新版本的类,则只需编辑生成的代理代码文件并删除类定义。当你编译它时,每个客户端(Windows应用程序和silverlight)将拥有自己的编译类库版本,但它们都来自相同的源代码。