У нас есть система клиент / сервер, где все коммуникации осуществляются с использованием собственного протокола через двоичный поток / поток SSL по TCP. Весь наш код написан на C # .NET 2.0, а некоторые части - на 3.5. Наш протокол разработан для поддержки различных шаблонов обмена сообщениями, а именно запроса / ответа, и из-за отсутствия лучшего термина односторонние сообщения от клиента или сервера на нерегулярной основе.
Наша цель - добавить в нашу систему функцию переноса нашего протокола по HTTP. Есть несколько причин для этого, но мне не нужно объяснять это здесь, я думаю. Пожалуйста, скажите мне, если я должен.
Идея состоит в том, чтобы встроить наш протокол как приложение / двоичный файл в запросы HTTP с использованием стандартных методов запроса, т. Е. GET, PUT, POST, но не DELETE, и следуя спецификации HTTP. Это было бы довольно просто сделать, если бы наш протокол был только запрос / ответ. Основная проблема связана с односторонними сообщениями и, более конкретно, с нежелательными сообщениями, поступающими с сервера. Другая важная проблема заключается в том, что HTTP не ориентирован на постоянные соединения, но я верю, что с HTTP / 1.1 это можно преодолеть. Третья проблема заключается в том, что соединения с сервером не являются без сохранения состояния.
Мы разрабатывали и создавали прототипы в течение пары недель, и у нас было несколько идей:
- Рефакторинг кода на коммуникационном и протокольном уровнях как на стороне сервера, так и на стороне клиента. Хотя большая часть кода является общей, это большая работа, которая, по всей вероятности, не будет иметь успеха. Вопрос в том, может ли это быть сделано с нашим плохо разработанным протоколом?
- Используйте прокси-подход. Это означает создание HTTP-сервера с использованием WCF, развертывание HTTP-сообщений и ретрансляцию собственных сообщений на наш сервер и с него через постоянные соединения. Это потребовало бы уровня абстракции на стороне клиента, который фактически поддерживал бы два соединения с прокси. Одно соединение для выполнения запроса / ответа, а другое - для передачи нежелательных сообщений с использованием метода отложенного ответа.
- HTTP-туннелирование, которое мы еще не исследовали.
Мы надеемся, что кто-то сталкивался с этой проблемой раньше и мог бы дать какой-нибудь здравый совет?
Пожалуйста, примите мои извинения, если это неправильное место для размещения этого вопроса.