Вопрос

У меня есть клиент Silverlight, который мне нужно позвонить в веб -сервис. Веб -сервис построен в Java и использует кодирование XOP для прикрепления двоичных сообщений к некоторым ее вызовам. Тем не менее, служба Silverlight использует только звонки, которые не включают какую -либо бинарную кодировку. Однако, поскольку у меня нет контроля над веб -службой, я все равно должен иметь дело с многопартийным сообщением XOP - (пример одного ниже).

Пример ответа от веб -службы (данные раздеты)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:890535d9-d11f-4dfb-8393-789e20ea8064"; start="<root.message@cxf.apache.org>"; start-info="text/xml"
Date: Thu, 27 Jan 2011 22:03:09 GMT
Content-Length: 47247


--uuid:890535d9-d11f-4dfb-8393-789e20ea8064
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:Response xmlns:ns2="http://tempuri.com/"></ns2:Response>
    </soap:Body>
</soap:Envelope>
--uuid:890535d9-d11f-4dfb-8393-789e20ea8064--

Наша текущая реализация вручную строит сообщение SOAP, используя замену строки и использует класс WebClient, чтобы разместить запрос и загрузить ответ в качестве строки. Затем мы застряли с ручным анализом данных как XML. Это нормально, но это немного сложно, и у нас есть услуги отдыха, доступные для этого; Я бы очень хотел, чтобы сервисный прокси -сервер отвечал объектами.

Что я действительно хотел бы сделать, так это реализовать пользовательское поведение, которое будет перехватывать сообщение до того, как стек WS пытается покинуть мыло и удалить xop Gunk, но до сих пор я не нашел ничего, что позволит мне сделать такое.

Как я это вижу, у меня есть несколько вариантов:

  1. Создайте прокси -сервис на сервере (который я управляю), которая повторно повторно повторно обратит запрос в службу Java и может на самом деле обрабатывать XOP. Этот вариант имеет последствия для производительности, которых я хотел бы избежать.

  2. Реализуйте пользовательскую компанию MessageEncodingBindingElement, MessageEncoderFactory и MessageEncoder, которые будут обрабатывать XOP. Сначала этот вариант кажется лучшим, но, поскольку я не могу расширить TextMessageEncoderFactory или TextMessageEncoder (они являются внутренними классами), мне в основном нужно было бы переписать все, кодирующие все сообщение с нуля (большое спасибо Microsoft!).

  3. Оставьте вещь как есть.

Есть ли какие -нибудь варианты, которые я не вижу?

Это было полезно?

Решение

Нет, нет других альтернатив.

Я решил внедрить прокси-прокси-сервер ASHX, который будет использовать метод webClient.downloadString (), а затем разобрать только мыло и подключить его к ответу. Это должно быть достаточно гибким, и, самое главное, я могу просто использовать классы с автогенерированным прокси из Silverlight, а затем просто заставить конечную точку использовать мой прокси ASHX, что делает техническое обслуживание намного проще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top