Как я могу реализовать пользовательский 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, что довольно громоздко. Надеюсь, это поможет! Эта помощь для всех, а не только для этого поста.

Другие вопросы по тегам