【问题标题】:Override ToString method in WCF service覆盖 WCF 服务中的 ToString 方法
【发布时间】:2012-06-06 16:26:14
【问题描述】:

这是我的服务生成类:

public partial class MyClass : object, 
                               System.Runtime.Serialization.IExtensibleDataObject, 
                               System.ComponentModel.INotifyPropertyChanged 
{ }

我正在使用我自己的服务。在MyClass 中,我已经覆盖了ToString(),但我的客户端中没有它。我想要生成它,或者因为MyClass 是部分的,我可以自己覆盖ToString 吗?

我知道我可以写入生成的 .cs 文件。最好的方法是什么,我应该这样做吗?

【问题讨论】:

  • WCF 将生成一个客户端代理类,该类在序列化/反序列化时具有相同的 XML 签名 - 但 NOT “传播”任何从服务器到客户端的方法(严格来说只有数据 - 你的类的公共属性)。
  • 我明白了,但是如何实现我的目标?

标签: c# .net wcf serialization partial-classes


【解决方案1】:

如果您同时定义客户端和服务,则不需要使用 WSDL 生成类。将共享对象移动到单独的程序集中,并从客户端和服务器项目中引用它。当您创建服务引用时,有一个“高级”选项(我认为默认情况下处于启用状态),它重用 WSDL 中的任何已知类,而不是生成新类。

更好的是,如果你将服务契约移到你的共享库中,你甚至不需要创建服务引用,你可以直接调用ChannelFactory 并消除整个自动生成的代理类。

我的博客上有关于如何做这两件事的演示:http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

如果您绝对需要使用服务中的 WSDL(例如,您无法控制服务端并且它可能会改变),那么您可以扩展 VS 的部分类创建(如您所建议的)。如今,您从 VS 获得的大多数自动生成类都是部分类,专门用于使这种扩展成为可能。当然,缺点是不能保证客户端和服务器的附加部分类方法是相同的。我绝对会认为这是最后的选择。

【讨论】:

  • 你能简单解释一下为什么该服务会生成部分类吗?什么原因?
  • 几乎所有 VS2010 自动生成的都是部分类,所以你可以根据需要扩展它们。
【解决方案2】:

如果您在客户端和服务器项目之间共享覆盖方法exixts的dll,您可以使用该方法。默认情况下,WCF 生成的每个类仅具有在服务接口中声明的属性。没有生成任何方法。

您可以只创建一个单独的 dll 文件,并将您想要在服务和客户端之间共享的内容放入此 dll;并将此 dll 添加为对客户端和服务项目的引用。默认情况下,当您生成代理时,它不会自动生成共享类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2018-01-10
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多