#reactjs #wcf #shared-hosting
#reactjs #wcf #общий хостинг
Вопрос:
У меня есть существующая служба WCF, настроенная на общем хосте Windows через GoDaddy, и я хочу загрузить приложение react на тот же хостинг, чтобы использовать эту службу.
Итак, например, у меня настроена служба https://example.com/Service1.svc/
, и при вводе https://example.com
я хочу, чтобы приложение react было видимым и по-прежнему могло получать доступ к службе по существующему URL.
Я не уверен, как настроить мой web.config для выполнения этого требования. Переход к корневому домену выдаст мне ошибку 404, как и попытка перейти к index.html , несмотря на существующий файл. Если я очищу свой web.config, сайт react будет работать правильно, но, очевидно, служба больше не работает.
Ниже приведена моя веб-конфигурация:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<trust level="Full" originUrl="" />
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000" />
</webServices>
</scripting>
</system.web.extensions>
<system.serviceModel>
<services>
<service name="MyService.Service1" behaviorConfiguration="web">
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="httpBinding"
contract="MyService.IService1" />
<endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="httpsBinding"
contract="MyService.IService1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="web">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp helpEnabled="true" defaultBodyStyle="Bare" faultExceptionEnabled="true"
automaticFormatSelectionEnabled="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<bindings>
<webHttpBinding>
<binding name="httpBinding">
<security mode="None" />
</binding>
<binding name="httpsBinding">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
<staticContent>
<clear />
<mimeMap fileExtension="." mimeType="*/*" />
<mimeMap fileExtension=".txt" mimeType="*/*" />
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
</system.webServer>
</configuration>
В качестве альтернативы я обнаружил, что могу поместить службу во вложенную папку и настроить виртуальный каталог так, чтобы он там работал, однако это изменяет URL службы http://example.com/subfolder/Service1.svc
, что на данном этапе нежелательно. Могу ли я каким-либо образом заставить исходный URL каким-либо образом указывать на службу в подпапке?
Любая помощь будет оценена.
Ответ №1:
Думаю, я понял это. Сначала я подумал, что это как-то связано с какой-то конфигурацией в службе, блокирующей все остальное, и, как оказалось, я был почти прав, за исключением того, что это не имело никакого отношения к самой службе и все, что связано с этим разделом web.config:
<staticContent>
<clear />
<mimeMap fileExtension="." mimeType="*/*" />
<mimeMap fileExtension=".txt" mimeType="*/*" />
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
В частности, эта <clear />
строка удаляет существующие обработчики содержимого, поэтому сервер даже не может обслуживать файлы HTML и js, составляющие сайт react.
Комментарии:
1. Поддерживают ли они полное доверие? Насколько я знаю, они это не поддерживают. Я использовал их в прошлом, и они это не поддерживали.