2009-08-26 34 views
1

我在webservices之间传递引用类型时遇到了一些困难。如何在Web服务之间传递引用类型?

我的设置如下。

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

  1. WebServiceOne
  2. WebServiceTwo

WebServiceOne声明,我用我的控制台应用程序类的详细信息...我们称之为MyClass。

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

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

在包含WebServiceTwo的项目中,存在对WebServiceOne的引用,以便我可以声明MyClass。

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

我基本上得到一个错误,说Console.WebServiceOne.MyClass是不一样的MyProject.WebServiceOne.MyClass。

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

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

任何帮助,将不胜感激!

+0

你到底为什么有人downvote这个问题?这是一个完全合法的问题。也许我没有解释得很好? – mezoid 2009-08-26 20:49:18

回答

1

我和我的工作人员中的一位更高级的人聊过,他们提出了以下解决方案,对我而言效果很好。

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

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

因此,目前来看,这似乎是最好的解决方案...因为它的工作原理和实现我的目标。

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

但我还是谢谢你! :-)

0

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

编辑:为了反映意见

在这种情况下采取reference.cs从Web服务,你无法控制它的使用作为共享型。

+1

不知道我能做到这一点,因为WebServiceOne由第三方控制。基本上,他们提供的类声明是我必须要处理的。我只是想弄清楚如何再次通过该值到另一个Web服务也引用WebServiceOne。 – mezoid 2009-08-26 11:41:46

0

你的错误消息,解释该问题。在客户端的代理类是不一样的类型,在服务器端的原始类,也绝不会。无论是引用类型还是值类型都与它的工作方式无关。

我不太明白您的具体问题是什么,但这里有一些猜测:

  • 如果你想比较两个对象是否相等,那么你将不得不写自己的比较功能比较每个重要财产/领域的价值。
  • 如果您试图将对象从一个服务复制到另一个服务,那么您将不得不编写自己的复制功能,依次复制每个重要属性/域的值。

如果您使用WCF,你就必须绕过这一切,只是共享客户端和两个服务之间的一个类定义的选项

相关问题