[英]WCF SOAP suddenly switched to message contracts
我正在使用WCF SOAP服务,该服务突然切换为在每个操作上生成消息协定。 因此,之前,将通过wsdl在客户端使用类似字符串Foo(int bar)的方法在生成的类中生成具有相同签名的方法,现在它正在生成签名FooResponse Foo(FooRequest request)。 目前尚不清楚是什么变化导致了这个问题,但是此服务合同中有数十种方法,并且用[MessageContract(IsWrapped = false)]装饰所有内容并不现实,我当然不必这么做,因为我们已经获得了自动生成我们之前想要的代码。 还有另一种方法可以使它回到以前的工作方式吗?
我不知道是什么原因造成的,但是一个解决方案是删除所有服务引用,然后直接通过从ChannelFactory.CreateChannel()返回的运行时生成的代理直接调用服务。
除了使用公共Web服务之外,没有理由比该方法更喜欢使用系统生成的服务引用。
尽管是最终确定性的,但是服务引用背后的代码生成过程对启动条件高度敏感,并且发现了另一层可能对您的客户端应用程序出错的东西。
意识到这并不能直接解决您的问题。
我跟踪了导致问题的更改。 目前尚不清楚这是为什么导致问题的,但确实是这样:
由于我不愿讨论的原因,消费者csproj处于一个解决方案中,该解决方案包含另一个以NuGet软件包形式提供给公司其他团队的csproj。 Web服务已安装该软件包。 我们的消费者还具有该NuGet软件包中提供的csproj的项目引用。 有人删除了项目参考,而是通过NuGet重新安装了它。 无论出于何种原因,这导致服务引用的生成与消息合同无关。 恢复它可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.