Не удается перенаправить WCF + IIS, возможно ли это? - PullRequest
3 голосов
/ 22 июля 2011

Я пытаюсь перенести активную активную службу WCF (SOAP, стандартная конфигурация HTTP-привязки) на новый сервер [в IIS 7] без необходимости повторного развертывания клиента.Рассматриваемая служба WCF - это «центральная служба», которая хранит информацию конфигурации и передает управление другим службам.

Новый сервер / служба работает, оба используют SSL / HTTPS и имеют действительные сертификаты.

Я установил новый виртуальный каталог на старом / исходном IIS [IIS 6] в качестве теста, установив «Перенаправление на URL», введен новый URL-адрес службы.С помощью веб-браузера переадресация URL-адресов выполняется правильно, и я могу перейти к службе, без предупреждений HTTPS или других сообщений - важные части пути и URL-адреса сохранены, и все, кажется, работает нормально.

Однако WCFзвонок не получается.Я почти уверен, что он пытается интерпретировать ответ перенаправления как ответ WCF SOAP и, очевидно, терпит неудачу, вот записанное исключение:

Error: The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (application/soap+xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were:
'<HTML><HEAD><link rel="alternate" type="text/xml" href="https://server-name-here/service-path-here.svc?disco"/>
<STYLE type="text/css">#content{ FONT-SIZE: 0.7em; PADDING-BOTTOM: 2em; MARGIN-LEFT: 30px}BODY{MARGIN-TOP: 0px; MARGIN-LEFT: 0px; COLOR: #000000; FONT-FAMILY: Verdana; BACKGROUND-COLOR: white}P{MARGIN-TOP: 0px; MARGIN-BOTTOM: 12px; COLOR: #000000; FONT-FAMILY: Verdana}PRE{BORDER-RIGHT: #f0f0e0 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #f0f0e0 1px solid; MARGIN-TOP: -5px; PADDING-LEFT: 5px; FONT-SIZE: 1.2em; PADDING-BOTTOM: 5px; BORDER-LEFT: #f0f0e0 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #f0f0e0 1px solid; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e5e5cc}.heading1{MARGIN-TOP: 0px; PADDING-LEFT: 15px; FONT-WEIGHT: normal; FONT-SIZE: 26px; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; MARGIN-LEFT: -30px; WIDTH: 100%; COLOR: #ffffff; PADDING-TOP: 10px; FONT-FAMILY: Tahoma; BACKGROUND-COLOR: #003366}.intro{MARGIN-LEFT: -15px}</STYLE><TITLE>Service-Name-Here'.

Есть ли способ обойти это?Я пытаюсь уменьшить нагрузку на сервер и постоянные / активные соединения, так как этот сервис довольно сильно загружен.Я надеялся, что пересылка приведет к тому, что клиент будет кэшировать новый URL-адрес и делать запрос на исходный URL-адрес редко, только когда истечет время переадресации или подобное.

Я читал различные проблемы и блоги, например, например,что редирект попросит клиента выполнить GET, а не POST, но я этого не вижу, пока просто сообщение выше.

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Вы в значительной степени ответили на свой вопрос: код обработки WCF HTTP в клиенте не может воздействовать на HTTP 301 или какой-либо аналогичный ответ, чтобы перенаправить вызов службы на другой URL, как это может сделать браузер.Я не могу задокументировать это, но код клиента WCF обрабатывает только тип ответа (HTTP + мыло, в вашем случае), для которого он настроен.

1 голос
/ 26 июля 2011

Если у вас есть возможность обновить старый сервер до Windows Server 2008, стоит обратить внимание на расширение IIS Application Request Routing . Его легко установить и настроить, а правила перезаписи URL довольно гибкие. Я использовал его для проксирования (например, для показа внутренней службы через веб-сервер, выходящий в Интернет), и он хорошо работает. Это не исключит работу, выполняемую на старом сервере, но ограничит ее небольшим количеством.

Если обновление ОС неосуществимо, предложение по обслуживанию маршрутизатора, указанное выше, будет вашим следующим лучшим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...