如何为RESTful WCF实现自定义QueryStringConverter?

时间:2010-09-17 19:06:11

标签: wcf .net-3.5 extensibility

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

3 个答案:

答案 0 :(得分:1)

这是不可能的。 微软对这个功能的实现如此草率,他们只是使用配置文件中配置的标准QueryStringConverter实现了新的。

没有实际工作的工作。错误报告中的第二个实际上根本不起作用。

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

它仍然在框架4.0中被打破。 我的猜测是,它并不重要 - 所以也许花点时间来增加bug的数量。

此致

克雷格。

答案 1 :(得分:1)

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

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

  

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

答案 2 :(得分:0)

做一些这样的事情:

在合同文件中

    [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);
}

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