问题

我刚刚开始创建一些WCF服务,但我有一个要求,让它们向后兼容遗留(.NET 1.1和2.0)客户端应用程序.

我已经设法为3.0和更大的客户端正确运行服务,但是当我使用basicHttpBinding端点发布服务时(我相信需要兼容性),服务重构了我的方法signatures.例如

 public bool MethodToReturnTrue(string seedValue);
 

在客户端应用程序中看起来像

 public void MethodToReturnTrue(string seedValue, out bool result, out bool MethodToReturnTrueResultSpecified);
 

我已经尝试了我在自托管控制台应用程序的app.config中可以想到的每个配置参数,但我似乎无法按预期使这个函数.我想这可能导致我的期望有缺陷,但我感到惊讶的是,WCF服务无法将bool返回类型处理到下一级客户端.

我目前的app.config看起来像这样.

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>  
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="MyServiceTypeBehaviors" Name="MyCompany.Services.CentreService.CentreService">
        <clear />
        <endpoint address="http://localhost:8080/CSMEX"    binding="basicHttpBinding" bindingConfiguration="" contract="IMetadataExchange" />
        <endpoint address="http://localhost:8080/CentreService" binding="basicHttpBinding" bindingName="Compatible" name="basicEndpoint" contract="MyCompany.Services.CentreService.ICentreService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
            <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
 

有人可以建议吗?

  最佳答案

啊,这是杀了我!我在大约三个月前的工作中这样做了,现在我不记得所有的细节。

但我确实记得,您需要basicHttpBinding,您不能使用新的序列化器(这是默认的);您必须使用“旧”XmlSerializer.

不幸的是,我不再在我这样做的地方工作,所以我不能看代码.我会给老板打电话,看看我能挖什么.

  相同标签的其他问题

c#.netwcfweb-servicesbackwards-compatibility