如何在Web服务之间传递引用类型?

时间:2009-08-26 11:34:36

标签: web-services .net-3.5 c#-3.0 parameters reference-type

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

我的设置如下。

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

  1. WebServiceOne
  2. WebServiceTwo
  3. WebServiceOne声明我在控制台应用程序中使用的类的详细信息...让我们称之为MyClass。

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

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

    在包含WebServiceTwo的项目中,有一个对WebServiceOne的引用,以便我可以获得MyClass的声明。

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

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

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

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

    任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

我在工作中与一位资深人士聊天,他们提出了以下解决方案,对我来说效果很好。

解决方案是使用Data Transfer Object并删除WebServiceTwo中对WebServiceOne的引用。

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

目前,这似乎是最好的解决方案......因为它起作用并实现了我的目标。

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

但是还是谢谢! : - )

答案 1 :(得分:0)

将类型移动到单独的程序集,并确保两个服务都使用它。在Web服务引用中,可能存在一些名为Reference.cs的自动生成代码。改变这种情况来使用你的类型。

编辑:反映评论

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

答案 2 :(得分:0)

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

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

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

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