Что я должен знать при разработке совместимого веб-сервиса WCF?

Я начинаю эту вики, чтобы собрать лучшие практики по созданию совместимых веб-сервисов (не клиентов) в WCF. Пожалуйста, поделитесь своим опытом, если вы знаете какую-либо функцию, которая обычно не совместима или не совместима с конкретной платформой.

3 ответа

Решение

Довольно простой:

  • избегайте любых особенностей.NET, таких как исключения (превращайте их в ошибки SOAP)

  • не используйте привязки, начинающиеся с net например, netTcp, netNamedPipes, netMsmq и т. д. - используйте wsHttpBinding для безопасных служб WS-* и basicHttpBinding для максимальной досягаемости / совместимости даже с самыми странными клиентскими платформами

  • не используйте NetDataContractSerializer

Я рекомендую WCF REST, показывающий несколько форматов сериализации, определенно xml для начинающих.

Общая совместимость:

  • Только HTTP и HTTPS транспортные каналы совместимы
  • Согласование учетных данных безопасности не совместимо (gotiateServiceCredential в безопасности сообщений). Он использует протоколы TLSNego или SPNego, которые не всегда поддерживаются другими платформами.
  • Потоковая передача HTTP также может вызвать проблемы
  • Бинарное кодирование по каналу HTTP не совместимо
  • ОлеТранзакции не совместимы
  • Используйте контекст безопасности службы с осторожностью (устанавливаем SecurityContext в безопасности сообщений). Он использует протокол разговора WS-Secure, который недоступен на некоторых платформах.

Редактировать:

  • WSDualHttpBinding и CompositeDuplexBindingElement не совместимы
Другие вопросы по тегам