Мы пытаемся переместить наши веб-службы из облачных служб 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>