#.net #wcf #json #soap
#.net #wcf #json #soap
Вопрос:
Есть ли какие-либо преимущества в производительности при использовании JSON вместо SOAP для кодирования сообщений при работе с WCF?
Спасибо
Ответ №1:
JSON лучше, чем SOAP. JSON содержит меньше информации о формате, чем SOAP.
SOAP передает на 20-40% больше данных, чем JSON, но это (в WCF) быстрее примерно на 20-25%, чем JSON. Пожалуйста, обратитесь к сравнению производительности: SOAP vs. JSON (WCF-Реализация)
Комментарии:
1. У меня ситуация, когда в WCF осуществляется связь с клиентом практически в режиме реального времени. Мой клиент опрашивает службу каждые 4 секунды. Передаваемые данные имеют размер примерно 10 кб. Что бы вы порекомендовали мне в этом сценарии, SOAP или JSON? Спасибо
2. @Joy: И SOAP, и JSON справятся с этой задачей. Очевидно, что с каждым из них есть компромиссы. Доверьтесь своему внутреннему чутью, и вам, вероятно, не нужно будет его менять. Если вам действительно нужно это изменить (возможно, это связано с пропускной способностью или скоростью обработки), это просто.
3. Ну, остается ли это утверждение верным до сегодняшнего дня?
Ответ №2:
Я категорически не согласен — WCF JSON обычно работает медленнее, чем двоичный файл WCF SOAP. Размер провода — это всего лишь один из компонентов эффективности сериализации и десериализации. Другим важным компонентом является время обработки.
Внутренне DataContractJsonSerializer сопоставляет пары имя / значение в формате JSON с набором XML-информации. Фактически DataContractJsonSerializer построен поверх DataContractSerializer на основе XML и обрабатывает каждый ввод JSON и вывод JSON, как если бы он имел дело с XML. Существует уровень абстракции более высокого уровня (средство записи JSON и средство чтения JSON, предоставляемые через JsonReaderWriterFactory), который фактически преобразует этот XML в JSON и JSON обратно во внутренний XML.
Все эти дополнительные переводы взад и вперед между наборами XML-информации и JSON суммируются. Пусть вас не вводит в заблуждение только размер. Посмотрите этот превосходный обзор (сопоставление между JSON и XML), чтобы увидеть, что происходит с DataContractJsonSerializer внутри и как он выполняет все это.
Теперь вполне может быть так, что в вашем сценарии JSON действительно быстрее, чем WCF. Но это было бы результатом конкретных типов данных, которые вы используете, и конкретных сценариев, в которых вы вызываете эти типы данных. Вы ДОЛЖНЫ измерять свои собственные наборы данных — не читайте случайные советы в Интернете о perf, включая мои. Доверяйте своим собственным цифрам!
Комментарии:
1. Предоставьте Microsoft написать десериализатор JSON, созданный с использованием синтаксического анализатора XML.. WTF?