我在webservices之间传递引用类型时遇到了一些困难。
我的设置如下。
我有一个引用两个Web服务的控制台应用程序:
WebServiceOne声明我在控制台应用程序中使用的类的详细信息...让我们称之为MyClass。
我的控制台应用程序调用WebServiceOne来检索MyClass列表。
然后将每个MyClass发送到WebServiceTwo进行处理。
在包含WebServiceTwo的项目中,有一个对WebServiceOne的引用,以便我可以获得MyClass的声明。
我遇到的麻烦是,当我编译时,似乎无法确定从控制台应用程序传递的MyClass与在WebServiceTwo中引用的WebServiceOne中声明的MyClass相同。
我基本上得到一个错误,说Console.WebServiceOne.MyClass与MyProject.WebServiceOne.MyClass不同。
有人知道这样做是否可行?也许我错误地引用了WebServiceOne?知道我可能做错了吗?
我唯一的另一个选择是将引用类型的每个属性直接传递给WebServiceTwo作为值类型......但我想避免这种情况,因为我最终传递了10-15个参数。
任何帮助将不胜感激!
答案 0 :(得分:1)
我在工作中与一位资深人士聊天,他们提出了以下解决方案,对我来说效果很好。
解决方案是使用Data Transfer Object并删除WebServiceTwo中对WebServiceOne的引用。
基本上,在WebServiceTwo中,我定义了BenefitDTO所需的所有值类型字段的表示。这有效地允许我将所有字段打包成一个对象,因此我不必将它们作为参数传递给方法。
目前,这似乎是最好的解决方案......因为它起作用并实现了我的目标。
很可能我没有很好地解释我的问题......这解释了为什么没有人能够提供帮助......
但是还是谢谢! : - )
答案 1 :(得分:0)
将类型移动到单独的程序集,并确保两个服务都使用它。在Web服务引用中,可能存在一些名为Reference.cs的自动生成代码。改变这种情况来使用你的类型。
编辑:反映评论
在这种情况下,从您无法控制的Web服务中获取reference.cs,将其用作共享类型。
答案 2 :(得分:0)
您的错误消息说明了问题。客户端的代理类与服务器端的原始类不同,永远不会。它是引用类型还是值类型与它的工作方式无关。
我不太明白你的确切问题是什么,但这里有一些猜测:
如果您使用的是WCF,那么您可以使用选项绕过所有这些,只需在客户端和两个服务之间共享一个类定义。