Как я могу предоставить сервис WCF в виртуальном каталоге без проверки подлинности с помощью форм? - PullRequest
2 голосов
/ 08 февраля 2010

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

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

Мой вопрос:

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 08 февраля 2010

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

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

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

<configuration>
   <authorization>
      <allow users="*" />
   </authorization>
</configuration>
1 голос
/ 09 февраля 2010

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

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

О - И пошаговое выполнение кода очень недооценено . ;)

1 голос
/ 08 февраля 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>
1 голос
/ 08 февраля 2010

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

...