Как я могу предоставить службу WCF в виртуальном каталоге без проверки подлинности с помощью форм?
-
19-09-2019 - |
Вопрос
Моя группа создает внутренние веб-сайты 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>