Размещение сайта React в той же папке, что и служба WCF

#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. Поддерживают ли они полное доверие? Насколько я знаю, они это не поддерживают. Я использовал их в прошлом, и они это не поддерживали.