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.