我已经实现了一个自定义的QueryStringConverter类,并使用自定义的WebHttpBehavior子类将其连接起来。当我进行服务调用时,它会在CanConvert覆盖中命中我的断点(我为此参数返回true),但它从不调用我的ConvertStringToValue覆盖,最后只是将null传递给服务调用...为什么ConvertStringToValue从不打电话给我怎么解决?
答案 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。希望这会有所帮助!这个帮助适用于所有人,而不仅仅是这篇文章。