添加服务参考“___已定义”a

时间:2011-04-22 15:45:20

标签: wcf web-services visual-studio-2008 reference

我有一个我正在处理的WCF Web服务,我构建它并且很高兴发现我可以在其中使用复杂类型。我添加了一些,然后意识到它们仍然不能用作客户端的那些类型。这是一个内部Web服务,因此这两种类型都是已知的。无论如何,这不是问题,因为我把复杂的类型拿出来了,但我认为它可能留下了一些遗留问题。

当我然后将所有基础类型(字符串,日期,整数等)的添加更改为然后将Web服务添加到客户端项目时,我得到了“[enumtype]已定义”错误。它发生在reference.cs文件中,所以我打开了它。果然有重复的枚举。另外还有一堆辅助(序列化)功能。重复的枚举来自我选择此Web服务之前已经存在的代码。它之前没有引起过任何问题。

我打开了以前(成功)服务引用的reference.cs。它没有重复项或功能,而且我注意到那里的条目之间存在差异。无法编译的reference.cs在以下几个地方有这个附加属性: [System.ServiceModel.XmlSerializerFormatAttribute()]

我还看到我的新失败代码使用了字符串[]而旧版本正在使用ArrayOfString。我没有故意改变这个,但必须以某种方式在这个过程中设置不同的东西。

有没有人有一些线索?

谢谢!

2 个答案:

答案 0 :(得分:0)

您是否尝试从项目中删除服务参考并重新添加?您可能还必须手动删除部分(或全部)serviceModel内容。如果那是唯一的Service Reference,那么肯定也会删除serviceModel元素内容。

一旦全部消失,请重新添加服务参考。如果您仍然遇到问题,那么服务元数据可能会生成无效的WSDL,导致重复的枚举。

更新:只是为了验证WSDL无效,您可以尝试创建service proxy manually using the SvcUtil命令行实用程序。它会像Visual Studio一样生成您的代理代码,并可能为您提供更多的故障排除信息。

答案 1 :(得分:0)

经过大量实验后,我发现了这一点:

到目前为止,我们的Web服务使用Request / Response类进行输入和输出。在1.0中需要,并且从那里结转。我试图创建一个简单的入口点,它以字符串形式发送并返回一个字符串。编译好了,但是:

  • 虽然您可以使用常规类型进行输入和输出,但如果您正在使用其他入口点的请求/响应类型交换,则不能。
  • 请求/响应和常规类型的混合方法将编译,但不会成功导入(至少进入Visual Studio 2008)。最终创建的内容似乎是尝试为所有函数创建输入和输出类,以将它们转换为复杂类型,以及创建重复条目但不会编译的请求/响应类型。
  • 这也意味着你不能发送请求对象并返回一个字符串(这是我发现这是不允许的) - 这在单元测试中产生了一个错误,这使我开始沿着这条路走下去。 / LI>

因此,如果您有请求/响应Web服务,则所有功能都必须遵循该协议。