【发布时间】:2012-01-10 17:28:38
【问题描述】:
我已经用谷歌搜索了很长时间,但找不到我所面临问题的答案。情况如下:
我有一个 .Net Web 服务(不是 wcf 服务,而是一个老式的 Web 服务),其中有一个 Web 方法,它返回一个 X 类型的对象。
现在,当我从不同的 .Net 项目创建对此 Web 服务的服务引用时,Visual Studio 将生成一个代理类(在 reference.vb 中),该类中 Web 方法的返回类型是该代理类(例如,类型 Y)而不是类型 X。
问题是,类型 X 是在存在于 Web 方法两端的外部引用中声明的类型。有什么办法吗(服务本身应该是一个 Web 服务,但我不在乎引用是“服务引用”还是“Web 引用”)我可以让 Visual Studio 明白没有必要创建一个代理类,它可以使用现有类型作为方法的返回类型吗?
我知道服务引用可以自动映射类型(您可以在创建服务引用时设置这些设置)。但是,这似乎只在创建对 wcf 服务的服务引用时才有效,而不是对普通的 .net Web 服务
更新:
似乎我需要以某种方式使 Visual Studio 与类型的命名空间相匹配。 John Saunders 向我提示了 xmltype 属性,我可以使用它来指定类型的完整命名空间。如果可行,我会尝试。
我还考虑了 Visual Studio 如何匹配课程。似乎在任何地方都没有关于 Web 服务的 wsdl 中的命名空间的信息(假设工作室使用 wsdl 作为生成引用的输入)那么工作室如何匹配类型?
更新2: 我尝试使用 xmltype 来映射命名空间。我不确定要使用什么命名空间(实际 ClrNamespace 的 uri 类型),所以我都尝试了。使用 uri 命名空间,我能够在 svcmap 中创建命名空间映射,但这会导致 reference.vb 文件中的代码在额外的命名空间内生成,而不是让 VS 想要映射类型。有什么新想法吗?真的有这么难吗?
【问题讨论】:
-
WCF 是普通的 .net web 服务。 ASMX 服务是旧的遗留技术。
-
您是否尝试在“添加服务引用”对话框中指定“重用类型”?程序集是否包含您的客户端应用程序引用的共享类型?由于命名空间,您可能仍然遇到问题。
-
这只是一个技术问题,原来的问题仍然存在
-
服务器和客户端都引用同一个程序集,包含所需的类型。默认情况下启用重用类型,但它似乎不了解类型之间的联系。我试图让系统理解这两种类型是相同的。不过,我还没有对命名空间做过任何事情......
-
在我的谷歌搜索中,我遇到了一些关于命名空间映射的提及,但我无法对此做出正面或反面,而且似乎不适用于我的情况。 Web 服务确实与方法的返回类型位于不同的命名空间中
标签: asp.net visual-studio-2010 web-services