1

我在 web 服务之间传递引用类型时遇到了一些困难。

我的设置如下。

我有一个引用两个 Web 服务的控制台应用程序:

  1. 网络服务一
  2. 网络服务二

WebServiceOne 声明了我在控制台应用程序中使用的类的详细信息……我们称之为 MyClass。

我的控制台应用程序调用 WebServiceOne 来检索 MyClass 的列表。

然后它将每个 MyClass 发送到 WebServiceTwo 进行处理。

在包含 WebServiceTwo 的项目中,有一个对 WebServiceOne 的引用,这样我就可以拥有 MyClass 的声明。

我遇到的麻烦是,当我编译时,似乎无法确定从控制台应用程序传递的 MyClass 是否与在 WebServiceTwo 中引用的 WebServiceOne 中声明的 MyClass 相同。

我基本上得到一个错误,说 Console.WebServiceOne.MyClass 与 MyProject.WebServiceOne.MyClass 不同。

有谁知道这样做是否可行?也许我错误地引用了 WebServiceOne?知道我可能做错了什么吗?

我唯一的另一个选择是将引用类型的每个属性作为值类型直接传递给 WebServiceTwo ......但我想避免这种情况,因为我最终会传递 10-15 个参数。

任何帮助,将不胜感激!

4

3 回答 3

1

我与我工作中的一位资深人士进行了交谈,他们提出了以下对我来说效果很好的解决方案。

解决方案是使用数据传输对象并删除 WebServiceTwo 中对 WebServiceOne 的引用。

基本上,在 WebServiceTwo 中,我将所需的所有值类型字段的表示定义为 BenefitDTO。这有效地允许我将所有字段打包到一个对象中,因此我不必将它们中的每一个都作为方法中的参数传递。

所以目前,这似乎是最好的解决方案......因为它有效并实现了我的目标。

很可能我没有很好地解释我的问题......这解释了为什么没有人能够提供帮助......

不过还是谢谢!:-)

于 2009-08-27T02:13:51.047 回答
0

将类型移动到单独的程序集并确保两个服务都使用它。在 Web 服务参考中,可能有一些名为 Reference.cs 的自动生成代码。更改它以使用您的类型。

编辑:反映评论

在这种情况下,从您无法控制的 Web 服务中获取 reference.cs 将其用作共享类型。

于 2009-08-26T11:39:24.827 回答
0

您的错误消息说明了问题。客户端的代理类与服务器端的原始类不同,永远不会。无论是引用类型还是值类型,都与它的工作方式无关。

我不太明白你的确切问题是什么,但这里有一些猜测:

  • 如果您尝试比较两个对象是否相等,那么您必须编写自己的比较函数,依次比较每个重要属性/字段的值。
  • 如果您尝试将对象从一个服务复制到另一个服务,那么您将必须编写自己的复制函数,依次复制每个重要属性/字段的值。

如果您使用的是 WCF,您可以选择绕过所有这些,只在客户端和两个服务之间共享一个类定义。

于 2009-09-16T12:35:13.153 回答