我在类库中有以下类:Artist
,这是一个POCO
现在我在web服务中有一个方法(它引用了上面提到的库),其签名如下:
[WebMethod]
public int Artist_AddArtist(Artist a) {
//
}
当我尝试从应用程序中使用此服务时(也引用了上面提到的类库),Artist_AddArtist
方法的预期参数不是Artist
,而是一个新的Artist
中生成的Reference.cs
类型,它是自动生成的部分类。
因此,在我的应用程序中,我使用了库中相同的Artist
类,现在Web服务方法需要这个新的自动生成类型,我无法将它的实例传递给Web服务。 / p>
如何解决此问题?
答案 0 :(得分:3)
也许切换到WCF服务是一种选择。据我所知,使用WCF服务,您可以在服务器和客户端重用相同的类型。
This article解释了如何将ASMX Web服务迁移到WCF服务。
答案 1 :(得分:2)
你不能也不应该解决这个问题。
其他一些人会告诉你做一些事情,比如编辑生成的文件,但这不是一个好习惯(因为一旦更新了Web引用,更改就会消失)。
您所看到的是设计。请参阅Basics: How Web Services Work。
简而言之,当您使用“添加Web引用”时,Visual Studio会从服务中下载WSDL文件,并使用WSDL中的XML Schema创建一些代理类来表示架构描述的XML。它还为服务本身创建一个代理类,为服务中的每个操作提供方法。
代理数据类可以序列化为服务期望接收的XML,并且可以从服务器发送的XML中反序列化。
考虑它的一种方法是你只有这个问题,因为客户端和服务都是.NET。如果您的客户端是用Java编写的,那么您就不会考虑共享类。
请注意,如有必要,WCF可以执行此操作。它引入了客户端和服务之间的依赖关系(它们都必须使用包含类的程序集的兼容版本),但是当你需要这样做时,选项就在那里。当这些类中的行为必须由客户端和服务使用时,它很有用。