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

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

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

Мой вопрос:

Как сделать службу WCF общедоступной, т. Е. без проверки подлинности с помощью форм.

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

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

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


person Jim G.    schedule 08.02.2010    source источник


Ответы (4)


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

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

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

<configuration>
   <authorization>
      <allow users="*" />
   </authorization>
</configuration>
person KP.    schedule 08.02.2010

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

person t3rse    schedule 08.02.2010

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

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

Да, пошаговое выполнение кода очень недооценено. ;)

person Jim G.    schedule 09.02.2010

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

<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>
person Athens Holloway    schedule 08.02.2010