WCF无法生成客户端代理

-1 wcf visual-studio-2008

我有一个奇怪的问题,我似乎无法诊断,它似乎是一个PEBCAC的事情,但我花了很多时间试图解决它.我创建了一个WCF服务,我通过Windows服务托管.这项服务已经工作了一段时间,我有一个Windows窗体和一个Web界面.该服务最初是在XP上开发的,但我最近已迁移到Windows 7.当我迁移时,我发现该服务的Windows安全性阻止我在Windows 7上使用我的WinForms应用程序,但它在XP上工作得很好Windows Server 2008 R2,Windows 7和XP上的服务.为了简化开发过程中的事情,我完全禁用了安全性,我的WinForms应用程序再次在windows7上运行.

然后,我对WCF服务进行了一些其他更改,添加方法,更改数据协定等.唯一的端点更改是禁用wshttp上的安全性.突然,更新Web应用程序的服务引用不再创建客户端代理,但它确实生成了wsdl和xsd文件.我在XP和Win7上尝试过多种旧服务和新服务的组合,结果是:

  1. 更新引用时,旧服务工作正常,无论是在XP还是Win7上运行,以及Web应用程序代码是在XP还是Win7上.
  2. 新服务不会创建代理,无论是在XP还是Win7上运行,以及Web应用程序代码是在XP还是Win7上.我从服务引用更新中得不到任何错误,但是,configuration.svcinfoconfiguration91.svcinfo文件没有列出任何行为,绑定或端点.其余的文件看起来很好.
  3. 我可以使用svcutil获取元数据并使用新版本的服务生成代理代码.
  4. 更新服务引用时,我确实获得了对象资源管理器中显示的数据合同中的两个项目,但只有其中一项是正确的.我没有客户端或其他数据合同对象.
  5. 踢球者是Windows窗体应用程序适用于新服务,包括更新引用和调用服务方法.咦?

我查看了新服务中的服务,行为和端点定义,它们与旧服务匹配.我在网上找不到任何引用这样的错误.我意识到我必须在新代码中做错事,但由于它在WinForms应用程序中运行良好,我无法解释其中的差异.

任何帮助将不胜感激.也许我可以保留一些头发;)

-编辑-

在阅读答案后,我做了一些更多的研究,并尝试了一些其他的东西:

我已经查看了没有安全性的服务的xsd等文件,并且还恢复了它们在具有DataContract属性的顶级枚举方面的方式(没有这些)并且还将安全值恢复为他们使用的成为.在这两种情况下,我都没有看到任何错误,除了文件的名称不同:旧的服务引用使用xsd文件,数字后缀范围为2 - 5,而最新的文件使用1 - 4(不能看出这应该是影响事物,因为svcmap中的指针似乎是正确的).它确实使得难以区分,但我已经详细查看了每个文件,数据似乎正确,只是放在不同的文件中.

安全性恢复到旧值之后的wsdl文件与主机IP和计算机名称相同,如预期的那样.但还是configuration.svcinfoconfiguration91.svcinfo没有定义端点,行为或绑定.另外,奇怪的是,在定义的两个数据协定中,一个只有一个New成员:它的数据成员不存在.这是一个数据协定,它引用标记为Serializable但未列出DataContract属性的类.唯一改变的是我在类中添加了一个新的字符串成员.更奇怪的是,xsd文件中有一个正确的数据协定类定义.

我很困惑.

lui*_*ent 7

是的,可能您从应用程序中引用了您的合同程序集,并且当您通过"添加服务引用..."生成代理时,您正在重用引用程序集中的类型,这就是您的合同实体未生成的原因.要在添加服务引用时修复此问题,我建议您单击"高级"按钮,然后取消选中"重用引用程序集中的类型"选项,或者只是从应用程序中删除合同程序集引用.

我希望这对你有用!

服务参考设置