我有一个我一直在努力的Silverlight应用程序。此应用依赖于名为Customer
的自定义类。此类的实例从我的Web服务返回。我需要在此类定义中添加一个名为CalculateLoyalty()
的方法。我希望CalculateLoyalty
在服务器端和客户端都可用(我的Silverlight应用程序)。
目前,我可以在服务器上使用CalculateLoyalty
。不幸的是,该方法似乎没有通过网络传递。我有预感它的一些序列化的东西。如何在服务器端向我的类定义添加方法并确保它在客户端可用?
谢谢!
答案 0 :(得分:0)
方法不是序列化的,只有数据(属性/字段值),因此您必须在服务器上使用不同版本的.cs文件,而不是在客户端上。您是否在Web服务和silverlight项目之间共享源代码?
如果您使用的是.NET 4.5 / VS2012,则可以创建一个“可移植类库”,其中包含您的类,可以从.NET和Silverlight项目中引用它。
答案 1 :(得分:0)
生成服务引用时,它仅复制公共属性和字段。您可以在服务器和客户端之间共享类,并避免使用服务引用。我不打算详细说明如何做到这一点,但这里有一些相关的问题可以解释需要做什么。
Create WCF Client without auto generated proxy
Call synchronous WCF operation contract methods asynchronously on silverlight
即使你这样做,我也不建议不要在你的DTO上放置逻辑。我建议您创建一个LoyaltyCalculator
类并将Customer
传递给此类。事实上,即使您通过添加服务参考选项生成客户端,也可以执行此操作。
你的defult Silverlight解决方案将有2个项目。
您不需要这样做,但我建议添加2个新项目。
此时,您需要将相应类库的项目引用添加到Silverlight项目和Web项目中。
如果您不想创建共享库,请将类LoyaltyCalculator
添加到MpApp.Shared
或MyApp.Web
。来吧,在这里实施这个课程。
现在在MyApp.Shared.Silverlight
或MyApp
,如果您不想制作共享库,请选择添加 - >现有项目。浏览并选择LoyaltyCalculator.cs
。 不要双击它!!! 而是单击“添加”按钮上的向下/向下箭头。现在选择添加为链接。
LoyaltyCalculator
现在可供您的服务器和客户端使用,您只需维护一份副本。