Аутентификация WebServiceHostFactory и IIS


11

У меня возникла проблема с использованием WebServiceHostFactory в IIS.

«IIS содержит схемы аутентификации« IntegratedWindowsAuthentication, Anonymous », но привязка поддерживает только одну схему аутентификации. Допустимые схемы аутентификации - это Digest, Negotiate, NTLM, Basic или Anonymous. Измените параметры IIS, используется единая схема аутентификации ».

I wanted to keep both authentication schemes and managed to do so by not using the factory but setting up the endpoint manualy in web.config.

Мой вопрос заключается в том, что WebServiceHostFactory делать, чтобы получить этот результат? У меня создалось впечатление, что WebServiceHostFactory установит привязку к той же webHttpBinding, что и в моей конфигурации.

Редактировать: Я посмотрел на WebServiceHostFactory в отражателе, и он не делает ничего умного. Это просто фабрика для WebServiceHost.

Предоставляет ли IIS хост-службы, если вы настроили конечную точку в config? Или WebServiceHost настраивает вещи по-разному.

3

Это то, что сработало для меня. Добавление фиктивной конечной точки на раннем этапе (до открытия хоста службы), как показано ниже, похоже, сделало трюк. (Эта статья MSDN намекает на этом http://msdn.microsoft.com/en-us/library/bb412178.aspx.)

public class MyWebServiceHost : WebServiceHost 
{ 
    public MyWebServiceHost (Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) 
    { 
     // Inserting this dummy endpoint config seemingly does the trick: 
     AddServiceEndpoint(typeof(IMyContract), new WebHttpBinding(), string.Empty); 
    } 

    protected override void ApplyConfiguration() 
    { 
     // Typical programmatic configuration here per: 
     // http://msdn.microsoft.com/en-us/library/aa395224.aspx 
    } 
} 

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

  0

Я не могу протестировать этот ответ, так как это было задано некоторое время назад, и я работал над проблемой, а затем получил новую работу, но если вы скажете, что это работает, то это достаточно хорошо для меня. 10 июн. 112011-06-10 16:06:57

  0

Я не понимаю, где я должен ссылаться, что MyWebServiceHost 27 мар. 122012-03-27 07:22:25

  0

У меня была такая же проблема, и я смог заставить ее работать. Мне пришлось написать два класса: «MyWebServiceHostFactory» и «MyWebServiceHost». В классе фабрики я переопределял метод 'ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses)' и возвращал экземпляр 'MyWebServiceHost'. 'MyWebServiceHost' выглядит так, как в этом ответе, но я не переопределял' ApplyConfiguration() '. 11 июл. 122012-07-11 17:46:51


1

Я не уверен в WebServiceHostFactory, но похоже, что у вас есть служба внутри IIS, и у нее установлено несколько методов проверки подлинности. Если у вас есть IIS 5 или 6, попробуйте войти в IIS и просмотрите свойства веб-сайта или виртуального каталога, содержащего вашу службу. Перейдите на вкладку «Безопасность каталога», нажмите кнопку «Редактировать» в разделе «Анонимный контроль доступа и проверки подлинности», а затем отмените отметку «Анонимный доступ» или «Интегрированная проверка подлинности Windows». Я не уверен в IIS7.

+1

Проблема с этим состоит в том, что вы тогда ** не может отладить анонимно доступный веб-сайт **. ** Неудовлетворительная работа ** заключается в компиляции с единой аутентификацией, а затем перед тем, как вы отлаживаете переключение другого в IIS. Это работает, но тратится время и раздражает. Я видел сайты .NET 3.5, разработанные в течение многих лет без этой проблемы. С сайтами .NET 4 мой опыт был хуже. _ (Есть возможность изменить аутентификацию веб-сайта из файла MSBuild, но я не мог найти готовое построенное задание для этого.) _ 29 сен. 112011-09-29 02:25:47

  0

, который сделал трюк для меня, отличная находка! 13 фев. 122012-02-13 16:01:36

+1

Извините, но он сказал, что хочет сохранить обе схемы аутентификации ... Ваш ответ не помог в этом отношении. 01 мар. 122012-03-01 15:32:11


1

В разделе IIS7 вы можете не найти, где вы можете установить интегрированную проверку подлинности Windows. Чтобы увидеть настройку в консоли управления IIS7, вам необходимо выполнить шаги, описанные в следующей статье: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx (под названием «Ошибка: отладка завершилась неудачей, поскольку встроенная проверка подлинности Windows не включена», если ссылка не работает).

Надеюсь, это поможет.


-1

отключить безопасность в web.config-> Конфигурация тегов

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding> 
      <security mode="None"> 
      <transport clientCredentialType="Windows"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 

тогда ваша служба WCF не требует аутентификации ...

  0

Это всего лишь некоторый код ... просьба дать некоторое объяснение. Это не ответ на вопрос. 17 фев. 132013-02-17 12:12:46

  0

При предоставлении ответа вам действительно нужно предоставить некоторую форму объяснения (а не только образец кода). 17 фев. 132013-02-17 12:13:05