Как создать перенаправление на службу WCF? - PullRequest
4 голосов
/ 13 января 2012

У меня есть служба WCF, размещенная на моем веб-сайте A. И у меня есть другой сайт B, который перенаправляет все запросы на мой сайт A с помощью перезаписи URL-адреса IIS. Однако сайт B не обрабатывает запросы к файлам .svc, возвращает 404 не найдено. Есть идеи как заставить это работать?

Конфигурация перенаправления UPD выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Redirect" stopProcessing="true">
                    <match url=".*" />
                    <action type="Rewrite" url="http://localhost/site_A/{R:0}" logRewrittenUrl="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Я обнаружил, что в журналах IIS веб-сайта A (!) Нет запросов на файлы .svc. Он не перенаправляет эти запросы на сайт A. Однако, когда я запрашиваю файлы .htm с сайта B, он перенаправляет их на сайт A.

Ответы [ 3 ]

1 голос
/ 22 января 2012

Даже если вы добавите обработчик .SVC в IIS и перенаправите его так же, как вы делаете запросы .HTM, перенаправление не сохранит тело сообщения.Таким образом, запрос метода службы на SiteB не обязательно будет таким же, как вызов метода службы на SiteA - это зависит от вашей конфигурации, подвергается ли он RESTful и каковы ваши привязки.

Вы можете взглянуть на функцию Маршрутизация WCF 4.0 .Это требует, чтобы вы написали определенную логику для распознавания вызова и чтобы он вызывал другую конечную точку.

«Более грубое» решение состоит в том, чтобы просто использовать SiteB для размещения прокси-службы, которая просто принимает входящие запросы и вызывает эквивалентную службу SiteA, получает результат и возвращает его вызывающей стороне.

1 голос
/ 24 октября 2018

Если вам все еще нужен сервер для обработки другого обычного трафика, включая некоторые службы, один из вариантов - создать пул приложений только для перенаправления без управляемого кода.

Пример:

IIS With a main site of

Скажите, что вы хотите, чтобы все http://Websites/WcfServices перенаправили куда-то еще.

Сначала убедитесь, что URL Rewrite и ARR установлены, и настройте обратный прокси-сервер. (Обратите внимание, что вы можете изменить правило входящей перезаписи, чтобы оно указывало также на определенный путь, а не просто на другой сервер)

Action for Inbound Rewrite Rule with Rewrite URL set to http://internalWebServer:8080/internalWcfServices/{R:0}

Создание пула приложений для WcfServices без управляемого кода:

Add Application Pool. Name: WcfServiceRedirect; .NET CLR version: No Managed Code

Убедитесь, что WcfServices использует новый пул приложений:

WcfServices app's Basic Settings page with Application Pool set to WcfServiceRedirect

На этом этапе WCF не может перехватывать вызовы, например http://Websites/WcfService/CustomerDetails.svc, так как модули .net не могут быть загружены. Весь трафик будет направляться на внутренний сервер, установленный в обратном прокси.

1 голос
/ 16 января 2012

Я не уверен, но, насколько я помню, это может произойти, если у вас нет http-обработчика для .svc на веб-сайте B

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