Как я могу реализовать пользовательский QueryStringConverter для RESTful WCF?
Я реализовал настроенный класс QueryStringConverter и подключил его с помощью настроенного подкласса WebHttpBehavior. Когда я делаю вызов службы, он достигает моей точки останова в переопределении CanConvert (и я возвращаю true для этого параметра), но он никогда не вызывает моего переопределения ConvertStringToValue, и заканчивается просто передачей null вызову службы... почему ConvertStringToValue никогда не происходит позвонил и как я могу это исправить?
3 ответа
Это невозможно. Microsoft настолько небрежно относилась к реализации этой функциональности, что просто обновила стандартный экземпляр QueryStringConverter, используя тот, который настроен в файле конфигурации.
Там нет работы вокруг, которые на самом деле работают. Второй в отчете об ошибке фактически не работает вообще.
Короткий ответ: вы не можете. Смотрите ошибку здесь: http://connect.microsoft.com/VisualStudio/feedback/details/616486/bug-with-getquerystringconverter-not-being-called-by-webservicehost
Это все еще сломано в рамках 4.0. Я предполагаю, что это не важно - поэтому, возможно, найдите время, чтобы увеличить количество ошибок.
С уважением
Крейг.
Я знаю, что это довольно старый вопрос. Любой, кто ищет какой-либо ответ, должен иметь возможность добавить TypeConverter в свой класс, который может преобразовывать тип в строковое представление и из него.
http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.querystringconverter.aspx
Типы, которые имеют TypeConverterAttribute, который может преобразовывать тип в и из строкового представления.
Сделайте что-то вроде этого:
В файле контракта
[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, что довольно громоздко. Надеюсь, это поможет! Эта помощь для всех, а не только для этого поста.