jsonp с wcf работает с vs.net сервер, но НЕ на IIS

#wcf #iis #jsonp

#wcf #iis #jsonp

Вопрос:

Это сводит меня с ума. У меня есть .net 4, служба wcf, которая выводит jsonp. Он работает с использованием встроенного веб-сервера с vs.net однако, если я попытаюсь разместить в iis7 на 64-битной версии Windows 7, я не получу никакого ответа.

Если я попытаюсь перейти к файлу svc во время размещения в iis7, я получаю

«Настройки безопасности для этой службы требуют»анонимной» аутентификации, но она не включена для приложения IIS, в котором размещена эта служба».

При попытке доступа через клиентский запрос jquery jsonp я не получаю никакого ответа от службы, размещенной в iis7

Таким образом, конфигурация службы (web.config) в порядке, если она размещена внутри vs.net веб-сервер (просто не работает с iis)

Вот конфигурация

    <system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
  </bindings>
  <services>
    <service name="ServiceSite.CustomersService">
      <endpoint address="" binding="webHttpBinding"
                bindingConfiguration="webHttpBindingWithJsonP" contract="ServiceSite.CustomersService"
                behaviorConfiguration="webHttpBehavior"/>
    </service>
  </services>
</system.serviceModel>

<system.web>
    <compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
  

Сайт должен быть защищен ntlm / windows.
Я добавил следующее в раздел привязок web.config

             <security mode="TransportCredentialOnly">
          <transport clientCredentialType="Ntlm"/>
        </security>
  

При просмотре файла svc я теперь получаю междоменный обратный вызов javascript, который не поддерживается в аутентифицированных службах
Действительно? Верно ли, что jsonp не поддерживается?

Ответ №1:

Вероятно, это симптом неправильной настройки веб-сайта. Перейдите к функции аутентификации веб-сайта в диспетчере IIS и убедитесь, что она настроена.

Пример

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

1. На сайте должна быть отключена анонимная аутентификация (она должна быть защищена ntlm). Извините, что я не задокументировал это в вопросе.

Ответ №2:

Я почти уверен, что из-за того, как JSONP cross domain работает с сегодняшними недостатками, вам всегда нужно внедрять свою собственную систему безопасности.

Я использую SSL и HMAC security для междоменной аутентификации JSONP. Я сам выполняю аутентификацию в службе.

При выполнении JSONP вы не можете устанавливать заголовки или что-либо еще в запросе, потому что это делается путем добавления тегов, а не фактического объекта запроса XMLHTTP.