2

我在类库中有以下类:Artist,这是一个 POCO

现在我在 Web 服务中有一个方法(它引用了上述库),其签名如下:

[WebMethod]
public int Artist_AddArtist(Artist a) {
 //
}

当我尝试从应用程序(也有对上述类库的引用)使用此服务时,该Artist_AddArtist方法的预期参数不是,而是正在生成的Artist一种新类型,其中是一个部分类是自动生成的。ArtistReference.cs

因此,由于在我的应用程序中我使用Artist了库中的同一个类,而现在 Web 服务方法需要这种新的自动生成类型,因此我无法将它的实例传递给 Web 服务。

我该如何解决这个问题?

4

2 回答 2

3

也许切换到 WCF 服务是您的一个选择。据我记得,使用 WCF 服务,您可以在服务器端和客户端重用相同的类型。

本文介绍如何将 ASMX Web 服务迁移到 WCF 服务。

于 2009-04-10T22:06:49.303 回答
2

您不能也不应该解决问题。

其他一些人会告诉您编辑生成的文件之类的操作,但这不是一个好的做法(因为一旦 Web 参考更新,更改就会消失)。

您所看到的是设计使然。请参阅基础知识:Web 服务如何工作

简而言之,当您使用“添加 Web 引用”时,Visual Studio 会从服务中下载 WSDL 文件,并使用 WSDL 中的 XML Schemas 创建一些代理类来表示模式描述的 XML。它还为服务本身创建一个代理类,为服务中的每个操作提供方法。

代理数据类可以序列化为服务期望接收的 XML,并且可以从服务器作为回复发送的 XML 反序列化回。

一种思考方式是您只有这个问题,因为客户端和服务都是.NET。如果您的客户端是用 Java 编写的,那么您就不会考虑共享类。


请注意,如有必要,WCF 可以执行此操作。它在客户端和服务之间引入了依赖关系(它们都必须使用包含类的程序集的兼容版本),但是当您需要这样做时,可以选择。当这些类中存在必须由客户端和服务使用的行为时,它很有用。

于 2009-04-10T22:03:36.690 回答