Ошибка при перемещении веб-службы WCF на виртуальную машину Azure - PullRequest
0 голосов
/ 07 марта 2019

У меня есть старый веб-сервис WCF, который был перемещен на виртуальную машину Azure.

Я могу легко получить доступ в Azure: https://wcf/service.svc,, но когда я пытаюсь опубликовать на: https://wcf/service.svc/json/DoAction, этовозвращается с пустым ответом, когда я открываю это в браузере, я получаю ошибку 404.

За пределами Azure все работает нормально, есть идеи, что я могу сделать, чтобы заставить его работать?Я хотел бы, чтобы он работал в ВМ, поскольку есть другие элементы, которые были перемещены и работают нормально.

Вот часть файла web.config, которая относится к части "/ json /":

<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  <services>
    <service name="Service123" behaviorConfiguration="ChallengeBehavior">
      <endpoint address="" binding="wsHttpBinding" bindingConfiguration="ChallengeMessageEncoding" contract="IService123" behaviorConfiguration="SoapServiceBehavior" />
      <endpoint address="/json" binding="webHttpBinding" bindingConfiguration="RestServiceMessageEncoding" contract="IService123" behaviorConfiguration="RestServiceBehavior" />
    </service>
  </services>
  <behaviors>
    <endpointBehaviors>
      <behavior name="RestServiceBehavior">
        <webHttp defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" />
      </behavior>
      <behavior name="SoapServiceBehavior">
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <bindings>
    <webHttpBinding>
      <binding name="RestServiceMessageEncoding">
        <security mode="None">
        </security>
      </binding>
    </webHttpBinding>
    <wsHttpBinding>
      <binding name="ChallengeMessageEncoding">
        <security mode="None">
          <transport clientCredentialType="None" proxyCredentialType="None" />
          <message clientCredentialType="None" establishSecurityContext="false" negotiateServiceCredential="false" />
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>
</system.serviceModel>

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Нет проблем, мне кажутся фрагменты кода.Какая версия IIS установлена ​​на виртуальной машине Azure?У вас включена функция, поддерживаемая для WCF в IIS.enter image description here
Я подозреваю, что служба WCF, опубликованная на ВМ, не работает должным образом.Попробуйте опубликовать проект приложения-службы WCF по умолчанию и перейдите на страницу самостоятельного введения.
Кроме того, для определенного порта необходимо включить разрешение на исходящий / входящий вызов на брандмауэре.

ВМ >> Настройки >> Сеть

Не стесняйтесь обращаться ко мне, если есть что-то, с чем я могу помочь.

0 голосов
/ 20 марта 2019

@ Авраам, спасибо за ваш ответ.

Я наконец заработал, не уверен, какая часть помогла, но внесенные мной изменения:

a) Установлены дополнительные функции WCF (как указано выше)), поскольку только 2 были установлены

b) Добавлены дополнительные биты в веб-конфигурацию (позволяя запускать URL с точками в имени /Foo.svc/Save)

<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  <clear />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="/*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

c) Еще одна конфигурация дляточки поддержки:

<modules runAllManagedModulesForAllRequests="true" />

d) Расширенные конечные точки для поддержки HTTPS, так как вышесказанное начало работать для HTTP:

  <service name="PrivateService" behaviorConfiguration="PrivateBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="PrivateBehavior" contract="IPrivateService" behaviorConfiguration="SoapBehavior" />
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="PrivateBehaviorSecure" contract="IPrivateService" behaviorConfiguration="SoapBehavior" />
    <endpoint address="/json" binding="webHttpBinding" bindingConfiguration="RestSecure" contract="IPrivateServices" behaviorConfiguration="RestBehavior" />
    <endpoint address="/json" binding="webHttpBinding" bindingConfiguration="Rest" contract="IPrivateService" behaviorConfiguration="RestBehavior" />
  </service>
  ...
  <webHttpBinding>
    <binding name="Rest">
      <security mode="None">
      </security>
    </binding>
    <binding name="RestSecure">
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None" />
      </security>
    </binding>
  </webHttpBinding>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...