与Web服务代理类和原始类的类引用冲突

时间:2009-09-30 19:40:45

标签: c# web-services

基本上这是在研究了这个之后发生的事情。

如果我尝试在我的测试Web项目代码中的任何地方使用某个Web服务方法返回的类型,例如在代码隐藏中,我会遇到命名空间冲突,因为现在Web项目会看到2个不同的定义。一个作为我的Web服务引用命名空间中的代理类,然后是引用项目中的原始类定义,它定义了它的名称空间

那么如何通过这个呢?我已经尝试转换到最初定义类的命名空间但没有运气,我不断收到错误,说它无法转换为。

我尝试对电话进行演员表但没有运气。

点击此视频,点击此处为您提供更多代码详情:http://www.elbalazo.net/Post/WebServiceProxyClassIssue.mp4(请务必按播放..如果使用quicktime查看此mp4,则不会自动启动)

5 个答案:

答案 0 :(得分:1)

在处理一年前需要进行通信的两个Web服务时,我遇到了同样的问题。

我相信我通过定义一个接口来解决这个问题,这两个接口都实现并解耦了依赖于这些类的代码而不是使用接口。这很好地解决了。

我会告诉你更多细节,但我不知道他们会帮助你。

我建议创建一个IServiceAuthResponse接口,让你的类实现该接口。

答案 1 :(得分:1)

问题是你非常喜欢只使用一种类型:

使用.NET 2.0 Web服务代理,这是一个PITA,您需要在两者之间手动移植数据。值得庆幸的是,这在WCF中已得到修复,它允许您使用来自其他程序集的类型(只要它们匹配)。您可以使用/reference参数svcutil.exe执行此操作,或者IDE会在VS2008中轻松指导您完成此任务。

是否有可能在客户端切换到WCF?

如果问题是名称空间 - 那么要么完全限定它们,要么使用类型别名:

using OrderDto = Some.Long.Namespace.Order;

然后您可以使用OrderDto来表示Order - 但它只是 一个别名,并且仅适用于单个代码文件。

答案 2 :(得分:1)

看看SchemaImporterExtensions。基本上,Visual Studio 2005/2008有一种方法可以覆盖它为Web服务生成代理的方式。

以下是我在WCF之前几天所用的文章的链接 http://www.microsoft.com/belux/msdn/nl/community/columns/jdruyts/wsproxy.mspx

当然现在我使用WCF!所以我不再需要处理这个问题,但它仍然适用于VS 2008。

答案 3 :(得分:1)

你无法做你想做的事。马上停下来ASMX Web服务没有此功能。期间,这就是它的全部。他们从来没有这个功能,他们永远不会有这个功能。

此缺陷已在WCF中得到纠正。


你问人们如何使用网络服务(非常好,谢谢你,大约十年)。作为一项学习练习,我不会马上给出完整的答案。相反,我会问你如何从Java客户端调用Web服务?

更好的是,您从未听说过的客户如何使用您从未听说过的编程语言来调用该服务?


答案是他们会使用代理类。有关详细信息,请参阅Basics: How Web Services Work,但简单地说,使用该服务的客户端只能看到WSDL。 WSDL根据XML Schema描述服务,而不是.NET类型。


之前的评论提到你的老板认为WCF太过分了。将他指向Microsoft says: ASMX Web Services are a “Legacy Technology”并告诉他WCF不是矫枉过正 - 它是ASMX的替代品。

答案 4 :(得分:0)

无论您使用哪一个,都声明ServiceAuthResponse对象使用完整的名称空间。 所以像:

Web.Project.Namespace.ServiceAuthResponse response = serviceProxy.getServiceAuthResponse();

当您需要将其中一个转换为另一个时,您将无法直接进行直接投射,您需要手动映射数据。