这是我的服务生成类:
public partial class MyClass : object,
System.Runtime.Serialization.IExtensibleDataObject,
System.ComponentModel.INotifyPropertyChanged
{ }
我正在使用自己的服务。在MyClass
我已覆盖ToString()
,但我的客户端没有。我想要生成它,或者MyClass
是部分我可以自己覆盖ToString
吗?
我知道我可以用生成的.cs文件写。什么是最好的方法,我应该这样做?
答案 0 :(得分:6)
如果要定义客户端和服务,则不需要使用WSDL生成类。将共享对象移动到单独的程序集中,并从客户端和服务器项目中引用它。当你创建服务引用时,有一个“高级”选项(我认为默认情况下是这个选项)可以重用WSDL中的任何已知类而不是生成新类。
更好的是,如果将服务合同移动到共享库中,甚至不需要创建服务引用,则可以直接调用ChannelFactory
并删除整个自动生成的代理类。
我在博客上演示了如何完成这两件事:http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html
如果您绝对需要使用服务中的WSDL(例如,您无法控制服务端并且它可能会改变您),那么您可以扩展VS的部分类创建(如您所建议)。这些天你从VS获得的大多数自动生成类都是部分类,专门用于实现这种扩展。当然,缺点是没有什么能保证客户端和服务器的附加部分类方法是相同的。我绝对认为这是最后的选择。
答案 1 :(得分:3)
如果您在客户端和服务器项目之间共享覆盖方法exixts的dll,则可以使用该方法。默认情况下,WCF生成的每个类仅包含在服务接口中声明的属性。没有生成任何方法。
您可以创建一个单独的dll文件,并将您想要在服务和客户端之间共享的内容放入此dll中;并添加此dll作为客户端和服务项目的引用。默认情况下,当您生成代理时,它不会自动生成共享类。