Назад | Перейти на главную страницу

Использование IIS ARR и перезаписи URL для отправки запросов веб-служб на новый сервер

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

Я не администратор IIS, поэтому я попытался немного поискать и выяснить, как это сделать с помощью ARR и URL Rewrite, но, похоже, это не работает, поэтому я думаю, даже если это правильный подход для начала!

Я включил прокси в ARR и создал правило перезаписи в IIS для своего приложения. Вот результат правила перезаписи в web.config старого адреса:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://new-address.azurewebsites.net/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Это правильный способ добиться этого? Или мне нужно посмотреть на решение проблемы по-другому?

Заранее спасибо.

Исправлена ​​проблема с использованием RoutingService вместо перезаписи AAR и URL! Просто нужно было добавить файл web.config в пустую папку и готово!

<?xml version="1.0"?>
<configuration>
<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true">
    <serviceActivations>
      <add factory="System.ServiceModel.Activation.ServiceHostFactory" relativeAddress="./MyService.svc" 
            service="System.ServiceModel.Routing.RoutingService,System.ServiceModel.Routing, version=4.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35" />
    </serviceActivations>
  </serviceHostingEnvironment>
  <services>
    <service name="System.ServiceModel.Routing.RoutingService" behaviorConfiguration="DefaultServiceBehavior">
      <endpoint name="basicHttpSampleService" address="" binding="wsHttpBinding" bindingConfiguration="sslBinding" contract="System.ServiceModel.Routing.IRequestReplyRouter" />
      <endpoint address="mex" binding="mexHttpsBinding"  contract="IMetadataExchange" />
    </service>
  </services>
  <behaviors>
  <serviceBehaviors>
    <behavior name="DefaultServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <routing filterTableName="routingFilterTable" routeOnHeadersOnly="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<routing>
  <filters>
    <filter name="AddressFilter" filterType="MatchAll"/>
  </filters>
  <filterTables>
    <filterTable name="routingFilterTable">
      <add filterName="AddressFilter" endpointName="basicHttpSampleServiceClient"/>
    </filterTable>
  </filterTables>
</routing>
<bindings>
  <wsHttpBinding>
        <binding name="sslBinding" receiveTimeout="00:05:00" sendTimeout="00:05:00" maxReceivedMessageSize="2147483647">
          <security mode="Transport">
            <transport clientCredentialType="None" />
          </security>
          <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" />
        </binding>
      </wsHttpBinding>
</bindings>
<client>
  <endpoint address="http://new-address.azurewebsites.net/MyService.svc"
    binding="wsHttpBinding" bindingConfiguration="sslBinding"
    contract="*" name="basicHttpSampleServiceClient" />
</client>
</system.serviceModel>
</configuration>