6

这是我的服务生成类:

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

我正在使用我自己的服务。在MyClass我已经覆盖ToString()但我的客户中没有它。我想生成它还是MyClass部分地我能够覆盖ToString自己?

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

4

2 回答 2

6

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

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

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

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

于 2012-06-01T12:38:27.940 回答
3

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

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

于 2012-06-01T12:35:42.753 回答