Поделиться через


Ошибка при размещении службы WCF .NET Framework 3.5 в Windows Server 2012 или Windows 8

Эта статья поможет вам устранить ошибку, возникающую при размещении службы .NET Framework 3.5 Windows Communication Foundation (WCF), которая использует активацию без HTTP в Windows Server 2012 или Windows 8.

Исходная версия продукта: Microsoft платформа .NET Framework Windows Communication Foundation, Windows Server 2012, Windows 8
Исходный номер базы знаний: 2803161

Симптомы

Рассмотрим следующий сценарий:

  • Служба WCF платформа .NET Framework 3.5 размещается на одном из следующих компьютеров:
    • Компьютер с чистой установкой Windows Server 2012 или Windows 8.
    • Компьютер, на котором установлена версия Windows Server 2012, обновленная с Windows Server 2008 R2, или версия Windows 8, обновленная с Windows 7. Функция активации WCF без HTTP (например, NET.TCP) на этом компьютере не была включена до обновления компьютера до Windows Server 2012 или Windows 8.
  • Вызывается служба WCF, размещенная в Windows Server 2012 или Windows 8.

В этом сценарии вы получите следующее сообщение об ошибке:

Исключение: System.InvalidOperationException: протокол "net.tcp" не имеет реализации типа HostedTransportConfiguration.
в System.ServiceModel.AsyncResult.End[TAsyncResult](результат IAsyncResult)
в System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End (результат IAsyncResult)

Примечание.

Эта проблема не возникает, если служба WCF .NET Framework 3.5 размещается в версии IIS, которая использует активацию без HTTP-протокола на компьютере под управлением Windows Server 2008 R2 или Windows 7.

Обходное решение

Для решения проблемы используйте один из указанных ниже способов.

Метод 1

Вручную измените корень файла Web.config. Для этого требуется выполнить следующие шаги.

Предупреждение

Если вы измените файл Web.config неправильно, приложения ASP.NET могут перестать работать. Рекомендуется сделать резервную копию файла Web.config перед его изменением.

  1. Откройте следующий файл в текстовом редакторе, например в Блокноте, от имени администратора:

    %windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config

  2. Добавьте следующий раздел конфигурации перед тегом </configuration>.

    Примечание.

    Тег </configuration> находится внизу файла.

    <system.serviceModel>
       <serviceHostingEnvironment>
          <add name="net.tcp" transportConfigurationType="System.ServiceModel.Activation.TcpHostedTransportConfiguration, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          <add name="net.pipe" transportConfigurationType="System.ServiceModel.Activation.NamedPipeHostedTransportConfiguration, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          <add name="net.msmq" transportConfigurationType="System.ServiceModel.Activation.MsmqHostedTransportConfiguration, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
          <add name="msmq.formatname" transportConfigurationType="System.ServiceModel.Activation.MsmqIntegrationHostedTransportConfiguration, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
       </serviceHostingEnvironment>
    </system.serviceModel>
    
  3. Добавьте в файл следующие разделы конфигурации, если они еще не существуют:

    <protocols>
       <add name="net.tcp" processHandlerType="System.ServiceModel.WasHosting.TcpProcessProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          appDomainHandlerType="System.ServiceModel.WasHosting.TcpAppDomainProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          validate="false" />
       <add name="net.pipe" processHandlerType="System.ServiceModel.WasHosting.NamedPipeProcessProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          appDomainHandlerType="System.ServiceModel.WasHosting.NamedPipeAppDomainProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          validate="false" />
       <add name="net.msmq" processHandlerType="System.ServiceModel.WasHosting.MsmqProcessProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          appDomainHandlerType="System.ServiceModel.WasHosting.MsmqAppDomainProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          validate="false" />
       <add name="msmq.formatname" processHandlerType="System.ServiceModel.WasHosting.MsmqIntegrationProcessProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          appDomainHandlerType="System.ServiceModel.WasHosting.MsmqIntegrationAppDomainProtocolHandler, System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          validate="false" />
    </protocols>
    
  4. Сохраните файл.

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

%windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config

Примечание.

Мы рекомендуем применить этот метод, чтобы обойти проблему, поскольку этот метод оказывает минимальное влияние на компьютер. Эти изменения применяются только к файлу Web.config и не влияют на другие приложения ASP.NET.

Метод 2.

Запустите SmconfigInstaller.exe, чтобы обновить файл Web.config.

Предупреждение

Этот метод может привести к обновлению большего количества конфигураций в файлах Web.config и файлах Host.config приложений IIS, чем необходимо для решения проблемы. Обновленные конфигурации зависят от количества размещенных и настроенных на компьютере приложений ASP.NET 2.0, ASP.NET 3.0 и ASP.NET 3.5. При применении этого метода следует проявлять осторожность, если используются другие приложения ASP.NET, которые не следует изменять.

  • Чтобы запустить SMConfigInstaller.exe на компьютере под управлением 32-разрядной операционной системы, выполните приведенные ниже действия.

    1. Введите в командной строке нижеуказанную команду и нажмите клавишу ВВОД.

      %windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMConfigInstaller.exe -c:install -f:tcp -f:pipe -f:msmq -f:http

    2. Перезагрузите компьютер.

  • Чтобы запустить SMConfigInstaller.exe на компьютере под управлением 64-разрядной операционной системы, выполните следующие действия.

    1. Введите в командной строке 64-разрядной ОС нижеуказанную команду и нажмите клавишу ВВОД.

      %windir%\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\SMConfigInstaller.exe -c:install -f:tcp -f:pipe -f:msmq -f:http

    2. В 32-разрядной командной строке введите следующую команду и нажмите клавишу ВВОД:

      %windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMConfigInstaller.exe -c:install -f:tcp -f:pipe -f:msmq -f:http

    3. Перезагрузите компьютер.