#.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. Есть ли различия между вашим локальным блоком и средой, в которой вы его опубликовали?