Межсерверная связь через известные порты - PullRequest
3 голосов
/ 06 мая 2011

Наша система продуктов состоит из сервера IIS 6.0, за которым находится Java SOA-сервер, за обоими из которых расположен сервер базы данных Oracle.

По различным причинам нам нужна служба Windows, работающая на JavaSOA-сервер, на котором хранятся непрозрачные BLOB-объекты, связанные с GUID.Вот упрощенная версия интерфейса:

interface IBlobService
{
    void PutBlob(Guid key, byte[] data);
    byte[] GetBlob(Guid key);
}

Основным пользователем IBlobService является веб-интерфейс, работающий на сервере IIS.Мы могли бы использовать удаленное взаимодействие WCF или .NET через пользовательский порт для связи между серверами.Тем не менее, наше приложение подлежит строгим требованиям аккредитации.Мы бы предпочли использовать известный порт для связи, а не пользовательский порт.

Мы не можем использовать именованные каналы, потому что нам нужно взаимодействовать между серверами.Мы рассматривали возможность использования MSMQ, поскольку он использует известный порт, но MSMQ ограничивает размер сообщения до 4 МБ.Нам нужно передать гораздо больше - не менее 60 МБ.

Какие другие возможности (если таковые имеются) предоставляет .NET, которые позволят осуществлять связь между серверами через известный порт?

Ответы [ 3 ]

1 голос
/ 06 мая 2011

Этот ответ не решает проблему в вопросе, но представляет альтернативный подход, который позволяет избежать проблемы.

После обсуждения не требуется, чтобы служба BLOB-объектов запускалась как служба Windows.Вместо этого простой Java-сервлет, который реализует интерфейс RESTful к данным, может быть размещен на сервере приложений Java.Это позволит обойти стек SOAP и накладные расходы XML, но при этом использовать возможности контроля сервера приложений Java.

Данные могут храниться с

PUT https://java-app-server.example.com/blobService/b12a0403-... HTTP/1.1
Content-Length: <LENGTH OF BLOB>
Content-Type: application/octet-stream

<BLOB>

, а затем извлекаться с

GET https://java-app-server.example.com/blobService/b12a0403-... HTTP/1.1

Что возвращает

Content-Length: <LENGTH OF BLOB>
Content-Type: application/octet-stream

<BLOB>
1 голос
/ 06 мая 2011

Если MSMQ - средство выбора, я бы разбил данные на части и собрал их.

Содержимое вашего тела сообщения непрозрачно, поэтому возможно включение всех данных блока, таких как идентификатор, последовательность, размер и CRC.

Возможно, вы захотите рассмотреть двоичные потоки WCF. Смотрите эту статью из MSDN: http://msdn.microsoft.com/en-us/library/ms733742.aspx

1 голос
/ 06 мая 2011

Ну, если вы используете WCF, вы можете использовать HTTP / HTPS. Вы также можете использовать raw tcp на любом порту, который вам нравится. например просто потому, что порт 80 является стандартным http-портом, не означает, что на этом порту нельзя запускать какой-либо другой протокол, если сервер его еще не использует.

...