Как я могу реализовать пользовательский QueryStringConverter для RESTful WCF? - PullRequest
2 голосов
/ 17 сентября 2010

Я реализовал настроенный класс QueryStringConverter и подключил его с помощью настроенного подкласса WebHttpBehavior. Когда я делаю вызов службы, он достигает моей точки останова в переопределении CanConvert (и я возвращаю true для этого параметра), но он никогда не вызывает мое переопределение ConvertStringToValue, и заканчивается просто передачей null вызову службы ... почему ConvertStringToValue никогда позвонил и как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 09 октября 2011

Я знаю, что это довольно старый вопрос.Любой, кто ищет ответ, должен иметь возможность добавить TypeConverter в ваш класс, который может преобразовывать тип в строковое представление и из него

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

Типы, которыеTypeConverterAttribute, который может преобразовывать тип в и из строкового представления.

1 голос
/ 27 мая 2011

Это невозможно. Microsoft настолько небрежно относилась к реализации этой функциональности, что просто обновила стандартный экземпляр QueryStringConverter, используя тот, который настроен в файле конфигурации.

Не существует обходных путей, которые действительно работают. Второй в отчете об ошибке фактически не работает вообще.

Короткий ответ: вы не можете. Смотрите ошибку здесь: http://connect.microsoft.com/VisualStudio/feedback/details/616486/bug-with-getquerystringconverter-not-being-called-by-webservicehost#tabs

Это все еще сломано в рамках 4.0. Я предполагаю, что это не важно, так что, возможно, найдите время, чтобы увеличить количество ошибок.

Привет

Craig.

0 голосов
/ 11 июня 2018

Сделайте что-нибудь вроде этого:

В файле договора

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

...