элемент wcf enablewebscript не распознан

#asp.net #wcf #configuration

#asp.net #wcf #конфигурация

Вопрос:

У меня возникла проблема с конфигурацией сервера, пытающегося заставить службы WCF работать. Компилятору не нравится enablewebscript как опция в поведении.

Ниже приведен раздел web.config, объявляющий элемент

     <behaviors>
    <serviceBehaviors>
        <behavior name="metadataAndDebug">
            <serviceMetadata
              httpGetEnabled="true"
              httpGetUrl=""/>
            <serviceDebug
              httpHelpPageEnabled="true"
              includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="AutoCompleteGet">
            <serviceMetadata httpGetEnabled="true"/>
        </behavior>
    </serviceBehaviors>

    <endpointBehaviors>
    <behavior name="MyApp.Webservices.AspNetAjaxBehavior">
      <enableWebScript/>         
    </behavior>          
  </endpointBehaviors>        
</behaviors>
  

и ошибка, о которой сообщает компилятор.

 Parser Error Message: Invalid element in configuration. The extension name 'enableWebScript' is not registered in the collection at system.serviceModel/extensions/behaviorExtensions.
  

У меня есть следующая информация на сервере:
— Windows Server Web Edition с пакетом обновления 1
— Установлена платформа .NET Framework 3.5sp1
— Установлены расширения Microsoft AJAX версии v1.0

Примечание: я только что включил активацию WCF в .NET Framework 3.0 этим утром (поскольку это первое использование службы WCF на этом сервере). Именно после этой активации возникла ошибка. Перед активацией служба вернула ожидаемое сообщение об ошибке 404.

Любые мысли о том, где искать, и почему установленная платформа service 3.5, похоже, не используется?

Ответ №1:

(Я знаю, что это старый вопрос, но в любом случае — у меня была такая же проблема у клиента, я наткнулся на ваш вопрос без ответа через поиск в Google, так что …)

Некоторые другие источники, которые я видел, предполагают, что это связано с удалением WCF (с ServiceModelReg.exe -команда u). Поскольку я работаю не на моем сервере, я не знаю, так ли это, но эту конкретную проблему можно обойти, зарегистрировав расширение поведения вручную в вашем web.config:

     <extensions>
        <behaviorExtensions>
            <add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </behaviorExtensions>
    </extensions>
  

Скорее всего, если этого не хватает, будут и другие вещи — вы можете проверить machine.config на компьютере, который, как вы знаете, работает, и взять весь раздел — вот мой для справки:

     <extensions>
        <behaviorExtensions>
            <add name="persistenceProvider" type="System.ServiceModel.Configuration.PersistenceProviderElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="workflowRuntime" type="System.ServiceModel.Configuration.WorkflowRuntimeElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="enableWebScript" type="System.ServiceModel.Configuration.WebScriptEnablingElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="webHttp" type="System.ServiceModel.Configuration.WebHttpElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="Microsoft.VisualStudio.Diagnostics.ServiceModelSink.Behavior" type="Microsoft.VisualStudio.Diagnostics.ServiceModelSink.Behavior, Microsoft.VisualStudio.Diagnostics.ServiceModelSink, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/></behaviorExtensions>
        <bindingElementExtensions>
            <add name="webMessageEncoding" type="System.ServiceModel.Configuration.WebMessageEncodingElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="context" type="System.ServiceModel.Configuration.ContextBindingElementExtensionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </bindingElementExtensions>
        <bindingExtensions>
            <add name="wsHttpContextBinding" type="System.ServiceModel.Configuration.WSHttpContextBindingCollectionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="netTcpContextBinding" type="System.ServiceModel.Configuration.NetTcpContextBindingCollectionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="webHttpBinding" type="System.ServiceModel.Configuration.WebHttpBindingCollectionElement, System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add name="basicHttpContextBinding" type="System.ServiceModel.Configuration.BasicHttpContextBindingCollectionElement, System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </bindingExtensions>
    </extensions>
  

Конечно, в зависимости от причины, по которой это отсутствует в первую очередь, не могу гарантировать, что это исправит. Удачи…

Комментарии:

1. Просматриваю старые вопросы и принимаю это как ответ. В конце концов я решил проблему, но не могу вспомнить, как.