Проблема с WCF REST WebInvoke UriTemplate и https

#.net #wcf #rest #webinvoke

#.net #wcf #rest #веб-вызов

Вопрос:

Моя служба WCF работает с атрибутами WebInvoke и использует httpGetEnabled.

 [OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/Function1")]
void Function1(Stream input);

[OperationContract]
[WebInvoke(Method="POST", UriTemplate = "/Function2")]
void Function2( Stream input );
 

Когда я пытаюсь заставить его работать с https, я не могу получить доступ к UriTemplates. Однако я могу получить доступ к svc и wsdl.

 <services>
  <service behaviorConfiguration="SslBehavior" name="MyService">
    <endpoint address="" binding="webHttpBinding" contract="IMyService" behaviorConfiguration="WebBehavior" />
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name="SslBehavior">
      <serviceMetadata httpsGetEnabled="True" />
      <serviceDebug includeExceptionDetailInFaults="True"/>
    </behavior>
  </serviceBehaviors>

  <endpointBehaviors>
    <behavior name="WebBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
</behaviors>
 

Эта служба размещена в IIS 7. Есть ли что-то очевидное, чего мне не хватает? Я перепробовал как можно больше комбинаций конфигурации. Когда я пытаюсь опубликовать одну из ссылок WebInvoke, я получаю ошибку 404.

Другая компания будет публиковать эту службу, поэтому она должна быть RESTfull

Редактировать

Я попробовал это в узле привязок:

   <webHttpBinding>
    <binding name="SslBinding" transferMode="Streamed">
      <security mode="None">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </webHttpBinding>
 

И установите конфигурацию привязки на конечной точке. Та же проблема: (

Комментарии:

1. Вы установили безопасность привязки в своей конфигурации?

2. смотрите мой ответ ниже. Возможно, вы захотите попробовать установить режим безопасности на транспортный.

3. я думаю, вам следует прислушаться к Тиму. Попробуйте режим безопасности = «Транспорт» вместо «Нет». Кроме того, вы можете задать адрес одной из конечных точек, начинающийся с «https: //»

Ответ №1:

Попробуйте установить режим безопасности на Транспортировку:

 <bindings>
  <webHttpBinding>
    <binding name="SslBinding" transferMode="Streamed">
      <security mode="Transport">  
        <transport clientCredentialType="None" />     
    </security>     
  </binding>   
</webHttpBinding>
 

Комментарии:

1. Ах! думаю, мне нужно подробнее изучить это. Я устанавливал режим на None. Спасибо! похоже, это помогло

2. Теперь я могу получить к нему локальный доступ, однако, когда я его публикую, я не могу получить к нему доступ из внешних ресурсов :/

3. Есть ли различия между вашим локальным блоком и средой, в которой вы его опубликовали?