0

我有一个一直在开发的 Silverlight 应用程序。这个应用程序依赖于一个名为Customer. 此类的实例是从我的 Web 服务返回的。我需要添加一个调用CalculateLoyalty()这个类定义的方法。我希望CalculateLoyalty在服务器端和客户端(我的 Silverlight 应用程序)上都可用。

目前,我可以CalculateLoyalty在服务器上正常使用。不幸的是,该方法似乎没有通过网络传递。我有预感它的一些序列化的东西。如何在服务器端向我的类定义添加方法并确保它在客户端可用?

谢谢!

4

2 回答 2

0

方法不会序列化,只有数据(属性/字段值)会序列化,因此您必须在服务器上使用与客户端不同版本的 .cs 文件。您是否在 Web 服务和 silverlight 项目之间共享源代码?

如果您使用的是 .NET 4.5/VS2012,则可以创建一个“可移植类库”,其中包含您的类,可以从您的 .NET 和 Silverlight 项目中引用。

于 2012-12-13T14:04:02.130 回答
0

当您生成服务引用时,它只复制公共属性和字段。您可以在服务器和客户端之间共享类并避免使用服务引用。我不会详细介绍如何执行此操作,但这里有一些相关的问题可以解释需要做什么。

在没有自动生成代理的情况下创建 WCF 客户端
在 silverlight 上异步调用同步 WCF 操作合同方法

即使您这样做,我也必须建议不要将逻辑放在您的 DTO 上。我建议创建一个LoyaltyCalculator类并将 a 传递Customer给它。事实上,即使您通过Add Service Reference选项使用生成客户端,您也可以这样做。

您的默认 Silverlight 解决方案将有 2 个项目。

  • MyApp - 这是您的 Silverlight 项目。
  • MyApp.Web - 这是宿主 Web 项目。

您不需要这样做,但我建议添加 2 个新项目。

  • MyApp.Shared - 一个 .NET 类库
  • MyApp.Shared.Silverlight - Silverlight 类库。

此时,您需要向 Silverlight 项目和 Web 项目添加对适当类库的项目引用。

将类添加LoyaltyCalculatorMpApp.Shared,或者MyApp.Web如果您不想创建共享库。继续在这里实现这个类。

现在在 中MyApp.Shared.Silverlight,或者MyApp如果您不想创建共享库,请选择Add -> Existing Item。浏览并选择LoyaltyCalculator.cs不要双击它!!! 相反,单击“添加”按钮上的小向下/更多箭头。现在选择Add As Link

LoyaltyCalculator现在您的服务器和客户端都可以使用,您只需维护一份副本。

于 2012-12-13T15:38:36.150 回答