Как я могу предоставить службу WCF в виртуальном каталоге без проверки подлинности с помощью форм?

StackOverflow https://stackoverflow.com/questions/2223033

Вопрос

Моя группа создает внутренние веб-сайты ASP.NET MVC с проверкой подлинности с помощью форм.

Я хотел бы разместить службу WCF в том же виртуальном каталоге, что и веб-сайт ASP.NET MVC.

Мой вопрос:

Как сделать услугу WCF свободно доступной, то есть безформы-аутентификация.

Моё нынешнее затруднительное положение таково:

  • Я могу получить доступ к .svc и просмотреть информацию wsdl, если сначала пройду аутентификацию через формы аутентификации в веб-браузере.
  • Но когда я пытаюсь получить доступ к службе WCF с помощью wcfTestClient.exe, я получаю следующую ошибку:

Ошибка:Невозможно получить метаданные от http://localhost/Services/MyService.svcЕсли это услуга Foundation Foundation Windows (R), к которой у вас есть доступ, пожалуйста, проверьте, что вы включили публикацию метаданных по указанному адресу.Для получения помощи в обеспечении публикации метаданных, пожалуйста, обратитесь к документации MSDN в http://go.microsoft.com/fwlink/?LinkId=65455.WS-МетаданныеОшибка обмена

Это было полезно?

Решение 3

Большое спасибо всем, кто пытался ответить на этот вопрос.

После часы При устранении этой проблемы я обнаружил, что специальный модуль аутентификации отклоняет попытки моего клиента получить метаданные.Достаточно сказать, что мне нужно было обойти эту логику.

О, и проходить через код очень недооцененный. ;)

Другие советы

У вас есть mex endpoint определено в вашем web.config для службы?Тестовый клиент, вероятно, ищет это.

ЕСЛИ да, еще одна возможность — отключить авторизацию в папке служб.Я никогда не проверял это, но теоретически это может сработать...

Итак, если веб-сайт localhost, поместите службу WCF localhost/services/myservice.svc или т.п.Затем добавьте web.config в /services папка, которая переопределяет авторизацию и разрешает все:

<configuration>
   <authorization>
      <allow users="*" />
   </authorization>
</configuration>

Если вы можете поместить файл .svc в подпапку виртуального каталога, вы можете использовать путь атрибут в проверке подлинности с помощью форм, чтобы разрешить доступ к нему с другим уровнем авторизации. Вот учебник.

Я предполагаю, что, поскольку вы используете проверку подлинности с помощью форм, виртуальный каталог настроен для анонимного доступа в IIS.С учетом сказанного: если вы разместите свою службу WCF, например.*.svc в отдельном каталоге, вы можете обновить основной файл web.config и добавить тег местоположения, чтобы отключить проверку подлинности с помощью форм для каталога, содержащего службу.Также обязательно отключите безопасность с помощью параметров привязки конфигурации WCF в файле web.config. <system.servicemodel> раздел, который необходимо добавить, если его еще нет:

<bindings>
  <wsHttpBinding>   <!-- one of many possible bindings -->
    <binding name="...">          
      <security mode="None"> <-- allows anonymous access -->
        <message clientCredentialType="None"/> <-- allows anonymous access -->
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top