我有一个我正在处理的WCF Web服务,我构建它并且很高兴发现我可以在其中使用复杂类型。我添加了一些,然后意识到它们仍然不能用作客户端的那些类型。这是一个内部Web服务,因此这两种类型都是已知的。无论如何,这不是问题,因为我把复杂的类型拿出来了,但我认为它可能留下了一些遗留问题。
当我然后将所有基础类型(字符串,日期,整数等)的添加更改为然后将Web服务添加到客户端项目时,我得到了“[enumtype]已定义”错误。它发生在reference.cs文件中,所以我打开了它。果然有重复的枚举。另外还有一堆辅助(序列化)功能。重复的枚举来自我选择此Web服务之前已经存在的代码。它之前没有引起过任何问题。
我打开了以前(成功)服务引用的reference.cs。它没有重复项或功能,而且我注意到那里的条目之间存在差异。无法编译的reference.cs在以下几个地方有这个附加属性: [System.ServiceModel.XmlSerializerFormatAttribute()]
我还看到我的新失败代码使用了字符串[]而旧版本正在使用ArrayOfString。我没有故意改变这个,但必须以某种方式在这个过程中设置不同的东西。
有没有人有一些线索?
谢谢!
答案 0 :(得分:0)
您是否尝试从项目中删除服务参考并重新添加?您可能还必须手动删除部分(或全部)serviceModel内容。如果那是唯一的Service Reference,那么肯定也会删除serviceModel元素内容。
一旦全部消失,请重新添加服务参考。如果您仍然遇到问题,那么服务元数据可能会生成无效的WSDL,导致重复的枚举。
更新:只是为了验证WSDL无效,您可以尝试创建service proxy manually using the SvcUtil命令行实用程序。它会像Visual Studio一样生成您的代理代码,并可能为您提供更多的故障排除信息。
答案 1 :(得分:0)
经过大量实验后,我发现了这一点:
到目前为止,我们的Web服务使用Request / Response类进行输入和输出。在1.0中需要,并且从那里结转。我试图创建一个简单的入口点,它以字符串形式发送并返回一个字符串。编译好了,但是:
因此,如果您有请求/响应Web服务,则所有功能都必须遵循该协议。