我正在开发一个WCF SOAP服务,该服务突然切换到在每个操作上生成消息合同。因此,在此之前,将在客户端通过wsdl在生成的类中使用相同的签名生成类似字符串Foo(int bar)的方法,现在它生成签名FooResponse Foo(FooRequest请求)。目前还不清楚是什么变化引起了这种情况,但是我们在这个服务合同中有很多方法,用[MessageContract(IsWrapped = false)]装饰一切都不实际,我当然不应该这样做。必须,因为我们之前得到了我们想要的自动生成的代码。还有另一种方法可以让它恢复到以前的方式吗?
答案 0 :(得分:0)
我不知道是什么导致它,但解决方案是删除所有服务引用,只需通过norm返回的运行时生成的代理直接调用服务。
除了使用公共Web服务之外,没有理由更喜欢在此方法上使用系统生成的服务引用。
虽然ultimatelty确定性,但服务引用背后的代码生成过程对启动条件非常敏感,并添加了另一层可能会对您的客户端应用程序出错的内容,如您所发现的那样。
感谢这不能直接解决您的问题。
答案 1 :(得分:0)
我追踪导致问题的变化。目前还不清楚为什么会导致这个问题,但确实如此:
由于我不会进入的原因,消费者csproj在一个包含另一个csproj的解决方案中,我们作为NuGet包提供给公司的其他团队。 Web服务已安装该软件包。我们的消费者还有一个项目引用,该引用是在NuGet包中提供的csproj。有人删除了项目引用并通过NuGet重新安装它。无论出于何种原因,这导致服务引用生成与消息契约发生混乱。还原它解决了问题。