我们有一个 .NET 2.0 Forms App 客户端,它使用 WSE 连接到 asmx Web 服务。
我们想将服务升级到 WCF 并使用 VS 2010 和 .NET 4,但是我们无法强制现有(企业)客户更新他们的客户端软件/框架等,因此我们处于这样的位置升级服务的唯一方法是我们能否保持向后兼容性。
我们可以在客户端更新 app.config,但不能更新可执行文件,这意味着我们无法添加新的服务引用。
我们尝试将 WCF 服务配置为接受来自客户端应用程序的调用,而不对客户端进行更改,但未成功。我怀疑这甚至可以做到;当然,在客户端中添加一个新的引用可以使它工作,但是使用现有的引用并试图用新的服务来“伪造”它并没有。
服务端的配置如下:
<bindings>
<basicHttpBinding>
<binding name="OnePointOneBinding" bypassProxyOnLocal="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehaviour" name="xyz.Services.xyzService">
<endpoint binding="basicHttpBinding" bindingConfiguration="OnePointOneBinding"
name="BasicBindingSvc" contract="xyz.Services.IxyzService" />
</service>
</services>
我们得到的错误是:
由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action 'http://webservices.xyz.co.uk/xyz/DoTest' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。
很高兴收到任何意见