我有一个奇怪的问题,我似乎无法诊断,它似乎是一个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上尝试过多种旧服务和新服务的组合,结果是:
configuration.svcinfo
和configuration91.svcinfo
文件没有列出任何行为,绑定或端点.其余的文件看起来很好.svcutil
获取元数据并使用新版本的服务生成代理代码.我查看了新服务中的服务,行为和端点定义,它们与旧服务匹配.我在网上找不到任何引用这样的错误.我意识到我必须在新代码中做错事,但由于它在WinForms应用程序中运行良好,我无法解释其中的差异.
任何帮助将不胜感激.也许我可以保留一些头发;)
-编辑-
在阅读答案后,我做了一些更多的研究,并尝试了一些其他的东西:
我已经查看了没有安全性的服务的xsd等文件,并且还恢复了它们在具有DataContract
属性的顶级枚举方面的方式(没有这些)并且还将安全值恢复为他们使用的成为.在这两种情况下,我都没有看到任何错误,除了文件的名称不同:旧的服务引用使用xsd文件,数字后缀范围为2 - 5,而最新的文件使用1 - 4(不能看出这应该是影响事物,因为svcmap中的指针似乎是正确的).它确实使得难以区分,但我已经详细查看了每个文件,数据似乎正确,只是放在不同的文件中.
安全性恢复到旧值之后的wsdl文件与主机IP和计算机名称相同,如预期的那样.但还是configuration.svcinfo
和configuration91.svcinfo
没有定义端点,行为或绑定.另外,奇怪的是,在定义的两个数据协定中,一个只有一个New成员:它的数据成员不存在.这是一个数据协定,它引用标记为Serializable
但未列出DataContract
属性的类.唯一改变的是我在类中添加了一个新的字符串成员.更奇怪的是,xsd文件中有一个正确的数据协定类定义.
我很困惑.
是的,可能您从应用程序中引用了您的合同程序集,并且当您通过"添加服务引用..."生成代理时,您正在重用引用程序集中的类型,这就是您的合同实体未生成的原因.要在添加服务引用时修复此问题,我建议您单击"高级"按钮,然后取消选中"重用引用程序集中的类型"选项,或者只是从应用程序中删除合同程序集引用.
我希望这对你有用!
归档时间: |
|
查看次数: |
4654 次 |
最近记录: |