Мне нужно создать службу WCF, размещенную в IIS, в хранилищах серверов используется HTTP-транспорт и состояние удержания. Хотя Im знает, что службы с сохранением состояния не являются хорошей идеей, этот последний ограничитель необходим, чтобы сделать работу службы с унаследованным клиентом.
Моя первая мысль заключалась в сеансе asp.nets для хранения значений. Я активировал режим совместимости asp.net в своей службе, что дало мне доступ к HttpContext, но значения, которые были помещены в объект сеанса, не сохранялись в памяти. Я предполагаю, что это связано с тем, что модуль http, который обрабатывает состояние сеанса, был неправильно настроен, но когда я искал ответ, я наткнулся на сессии WCF и подумал, что лучше использовать их.
Однако сеансы WCF показывают, что задокументировано, и помещают странный набор предварительных требований в службу, и я не смог найти конфигурацию, которая соответствует моим потребностям: должна быть размещена в IIS, должна использовать http или https-транспорт и не отвечайте на проверку подлинности Windows, потому что клиент и сервер не будут частью одного домена. Я пытаюсь добиться этого, используя wsHttpBinding, я слышал, что сессии WCF требовали безопасности или надежного сообщения, но: - Используя стандартную привязку и когда серверы не являются частью одного и того же домена, он не работает с "исключением SecurityNegotiationException". Это довольно логично, поскольку он использует защиту Windows.
-
Если я отключу защиту, он завершится неудачей, когда "Контракт требует сеанса", но привязка "WSHttpBinding" не поддерживает его или не настроена должным образом для его поддержки ".
-
Если при отключении безопасности я включаю надежное сообщение, я получаю исключение. Ошибка проверки привязки, потому что WSHttpBinding не поддерживает надежные сеансы по безопасности транспорта (HTTPS). Канал factory или узел службы не может быть открыт Используйте защиту сообщений для безопасного надежного обмена сообщениями через HTTP.
-
Ive попытался включить безопасность транспортного уровня, но это, похоже, не имеет никакого отношения к генерируемой ошибке
Есть ли какая-нибудь конфигурация, которая может работать для меня? Или я должен просто вернуться к плану использования сессий asp.net?