【问题标题】:How can I implement a custom QueryStringConverter for RESTful WCF?如何为 RESTful WCF 实现自定义 QueryStringConverter?
【发布时间】:2011-04-13 21:13:53
【问题描述】:

我已经实现了一个自定义的 QueryStringConverter 类,并使用自定义的 WebHttpBehavior 子类将其连接起来。当我进行服务调用时,它会在 CanConvert 覆盖中达到我的断点(并且我为此参数返回 true),但它从不调用我的 ConvertStringToValue 覆盖,最终只是将 null 传递给服务调用......为什么 ConvertStringToValue 永远不会打电话给我,我该如何解决?

【问题讨论】:

  • 更新:这已在 .Net 4.5 中修复

标签: wcf .net-3.5 extensibility


【解决方案1】:

这是不可能的。 Microsoft 对这一功能的实现如此草率,以至于他们只是更新了标准的 QueryStringConverter 方法,即使用配置文件中配置的方法。

没有真正有效的解决方法。错误报告中的第二个实际上根本不起作用。

简短的回答是你不能。 在此处查看错误:http://connect.microsoft.com/VisualStudio/feedback/details/616486/bug-with-getquerystringconverter-not-being-called-by-webservicehost#tabs

它在框架 4.0 中仍然存在问题。 我的猜测是这并不重要 - 所以也许花点时间增加错误的数量。

问候

克雷格。

【讨论】:

    【解决方案2】:

    我知道这是一个很老的问题。对于任何寻求答案的人,您应该能够将 TypeConverter 添加到您的类中,该类可以将类型转换为字符串表示形式和从字符串表示形式转换

    http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.querystringconverter.aspx

    具有可以将类型转换为的 TypeConverterAttribute 的类型 并来自字符串表示。

    【讨论】:

      【解决方案3】:

      做一些这样的事情:

      在合同文件中

          [OperationContract]
         [WebGet(UriTemplate = "/TabelasAuxiliares?requestex={requestex}", ResponseFormat = WebMessageFormat.Xml)]
              CadastrodeEscolasResponse TabelasAuxiliares(string requestex);
      

      在服务文件中

      public CadastrodeEscolasResponse TabelasAuxiliares(string requestex)
              {
      
                  XmlSerializer serializer = new XmlSerializer(typeof(CadastrodeEscolasRequest));
                  StringReader rdr = new StringReader(requestex);
                  CadastrodeEscolasRequest request = (CadastrodeEscolasRequest)serializer.Deserialize(rdr);
      }
      

      结论: 通过将 Xml 格式数据发送到字符串参数来调用服务。然后将 xml 转换为所需的类对象。这样可以避免创建非常麻烦的 QueryStringConvertor。希望这会有所帮助!此帮助适用于所有人,而不仅仅是这篇文章。

      【讨论】:

        猜你喜欢
        • 2014-05-25
        • 2012-04-26
        • 1970-01-01
        • 1970-01-01
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 2017-03-29
        • 1970-01-01
        相关资源
        最近更新 更多