Что я должен знать при разработке совместимого веб-сервиса 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 не совместимы