繁体   English   中英

WCF SOAP突然切换到消息合同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM