WCF Rest Service Хостинг на 2003 с POST / JSON

Как я получаю проблемы при размещении службы WCF на Win 2003 Server. Как это нормально работает на моем локальном ПК.

Пожалуйста, дайте мне знать, если мне нужно внести какие-либо изменения в Web Config. Файл. для того же.

Ошибка сервера в приложении '/' IIS указал схемы аутентификации "IntegratedWindowsAuthentication, Anonymous", но привязка поддерживает только спецификацию только одной схемы аутентификации. Допустимые схемы аутентификации: дайджест, согласование, NTLM, базовая или анонимная. Измените настройки IIS, чтобы использовалась только одна схема аутентификации. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.InvalidOperationException: IIS указал схемы аутентификации "IntegratedWindowsAuthentication, Anonymous", но привязка поддерживает только спецификацию только одной схемы аутентификации. Допустимые схемы аутентификации: дайджест, согласование, NTLM, базовая или анонимная. Измените настройки IIS, чтобы использовалась только одна схема аутентификации.

Ошибка источника:

Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местоположении исключения может быть идентифицирована с помощью трассировки стека исключений ниже.

Трассировки стека:

[InvalidOperationException: IIS specified authentication schemes 'IntegratedWindowsAuthentication, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used.]
   System.ServiceModel.Web.WebServiceHost.SetBindingCredentialBasedOnHostedEnvironment(ServiceEndpoint serviceEndpoint, AuthenticationSchemes supportedSchemes) +446264
   System.ServiceModel.Web.WebServiceHost.AddAutomaticWebHttpBindingEndpoints(ServiceHost host, IDictionary`2 implementedContracts, String multipleContractsErrorMessage) +709
   System.ServiceModel.Web.WebServiceHost.OnOpening() +203
   Microsoft.ServiceModel.Web.WebServiceHost2.OnOpening() in e:\bt\3781\Microsoft.ServiceModel.Web\Microsoft.ServiceModel.Web\WebServiceHost2.cs:69
   System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +229
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +121
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +479

[ServiceActivationException: The service '/Service.svc' cannot be activated due to an exception during compilation.  The exception message is: IIS specified authentication schemes 'IntegratedWindowsAuthentication, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used..]
   System.ServiceModel.AsyncResult.End(IAsyncResult result) +11599786
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +194
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +176
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +278
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75


Version Information: Microsoft .NET Framework Version:2.0.50727.3615; ASP.NET Version:2.0.50727.3618 

1 ответ

Решение

Есть быстрое и правильное исправление.

Быстрая починка:

В IIS перейдите в свойства веб-приложения, под которым работает служба, перейдите на вкладку "Безопасность каталога" и в группе "Аутентификация и контроль доступа" нажмите "Изменить...". Удалите ту схему аутентификации, которая вам не нужна. Хорошо из всех диалогов, а затем выполните сброс IIS.

Правильное исправление:

Убедитесь, что ваш сервис настроен на использование явной конечной точки. Я обнаружил, что с помощью привязки из коробки webHttpBindingи настройку конечной точки для использования webHttp поведение было уловкой.

Если вы не укажете конечную точку, WebserviceHost попытается угадать, что вы хотите, и неизменно выберет неправильную.

В вашем web.config у вас должно быть что-то вроде:

<system.serviceModel>
  <services>
    <service behaviourConfiguration="MyRestService.Behavior" 
             name="MyRestService>
      <endpoint address="" binding="webHttpBinding" contract="IMyRestService"
                behaviourConfiguration="MyRestService.WebHttpEndpointBehavior" />
    </service>
  </services>
  <bindings>
  </bindings>
  <behaviours>
    <serviceBehaviors>
      <behavior name="MyRestService.Behavior">
        <!-- Any configuration for the service, i.e. serviceDebug, etc. -->
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="MyRestService.WebHttpEndpointBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
  </behaviours>
</system.serviceModel>

Конечно, такая конфигурация позволила мне запустить службу WCF REST на сервере Win2k3 с установленным.NET 3.5 SP1.

Другие вопросы по тегам