#wcf #wcf-data-services
#wcf #wcf-data-services
Вопрос:
Почему возможно отправить в службу данных WCF следующую строку JSON:
{ SomeElement: 'val1', SomeOtherElement: 'val2' }
в то время как вам нужно отправить обычную службу WCF, например
[OperationContract,
WebInvoke (Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
public string SomeMehtod(string SomeElement, string SomeOtherElement)
следующая строка JSON
{ "SomeElement": "val1", "SomeOtherElement": "val2" }
Это несоответствие мне непонятно. Почему я должен использовать двойные кавычки в обычном веб-сериале, в то время как я могу опустить кавычки для имени элемента в службах данных WCF?
Возможно, кто-то знает ответ на этот вопрос….
Комментарии:
1. Стандарт JSON ( json.org ) требует, чтобы имя элемента было заключено в кавычки, и требует двойных кавычек для всех строк. Итак, ваш первый пример — допустимый JavaScript, но недопустимый JSON. Но это на самом деле не объясняет несоответствие.
2. Да, это правильно, и служба данных WCF, похоже, также принимает двойные кавычки. Похоже, что WCF здесь более терпим, чем обычный WCF. Однако странная вещь, потому что службы передачи данных WCF были введены после WCF… Мне просто любопытно…
3. Какой глагол вы используете для вызова вашей службы данных WCF (GET, POST, PUT и т.д.)? Это тоже POST? И является ли это пользовательским методом обслуживания?
4. В принципе, не имеет значения, POST это или PUT , в данном случае это был POST, но PUT также работает. Это не пользовательский сервисный метод.
Ответ №1:
Я очень хорошо знаком с внутренней инфраструктурой синтаксического анализа JSON в WCF, и, по сути, система, которая решает вторую ситуацию, действительно предназначена для поддержки «строгих» стандартов-complaint JSON.
Это просто совпадение, что первая ситуация работает с несоответствующим JSON. Не вникайте в это. Это не было сознательным дизайнерским решением. Надеюсь, это устранит путаницу!
Для получения более подробной информации вы можете просто изучить DataContractJsonSerializerOperationFormatter, DataContractJsonSerializerOperationBehavior и DataContractJsonSerializer с использованием Reflector.