Error al hospedar un .NET Framework WCF 3.5 en Windows Server 2012 o Windows 8
Este artículo le ayuda a resolver el error que se produce al hospedar un servicio de .NET Framework 3,5 Windows Communication Foundation (WCF) que usa la activación no HTTP en Windows Server 2012 o Windows 8.
Versión del producto original: Microsoft .NET Framework Windows Communication Foundation, Windows Server 2012, Windows 8
Número KB original: 2803161
Síntomas
Imagine la siguiente situación:
- El .NET Framework WCF 3.5 se hospeda en uno de los siguientes equipos:
- Un equipo que ejecuta una instalación limpia de Windows Server 2012 o Windows 8.
- Un equipo que ejecuta una versión de Windows Server 2012 que se actualizó desde Windows Server 2008 R2 o una versión de Windows 8 que se actualizó desde Windows 7. La característica de activación no HTTP de WCF (como NET. TCP) en este equipo no estaba habilitado antes de actualizar el equipo a Windows Server 2012 o Windows 8.
- Se invoca el servicio WCF hospedado en Windows Server 2012 o Windows 8 se invoca.
En este escenario, recibirá el siguiente mensaje de error:
Excepción: System.InvalidOperationException: el protocolo 'net.tcp' no tiene registrada una implementación del tipo HostedTransportConfiguration.
en System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
en System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(Resultado de IAsyncResult)
Nota
Este problema no se produce si el servicio WCF de .NET Framework 3.5 se hospeda en una versión de IIS que usa la activación no HTTP en un equipo que ejecuta Windows Server 2008 R2 o Windows 7.
Solución alternativa
Para evitar el problema, use uno de los métodos siguientes.
Método 1
Cambie manualmente la raíz del Web.config archivo. Para ello, siga estos pasos.
Advertencia
Si cambia el archivo Web.config incorrectamente, ASP.NET aplicaciones pueden dejar de funcionar. Se recomienda realizar una copia de seguridad delWeb.config antes de cambiarlo.
Abra el siguiente archivo en un editor de texto, como Bloc de notas, como administrador:
%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.configAgregue la siguiente sección de configuración antes de la
</configuration>etiqueta.Nota
La
</configuration>etiqueta se encuentra en la parte inferior del archivo.<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>Agregue las siguientes secciones de configuración al archivo, si aún no existen:
<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>Guarde el archivo.
Después de guardar el archivo, siga los mismos pasos para cambiar el siguiente archivo y, a continuación, reinicie el equipo.
%windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config
Nota
Se recomienda aplicar este método para evitar el problema porque este método tiene el efecto mínimo en el equipo. Estos cambios solo se aplican al Web.config y no afectan a otras ASP.NET aplicaciones.
Método 2
Ejecute SmconfigInstaller.exe para actualizar el Web.config archivo.
Advertencia
Este método puede actualizar más configuraciones en los archivosWeb.configaplicación iis Host.config que sean necesarias para resolver el problema. Las configuraciones actualizadas dependen de cuántas aplicaciones ASP.NET 2.0, ASP.NET 3.0 y ASP.NET 3.5 se hospedan y configuran en el equipo. Si usa este método, debe tener cuidado si usa otras aplicaciones ASP.NET que no se deben cambiar.
Para ejecutar SMConfigInstaller.exe en un equipo que ejecuta un sistema operativo de 32 bits, siga estos pasos:
En un símbolo del sistema, escriba el siguiente comando y pulse Entrar:
%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMConfigInstaller.exe -c:install -f:tcp -f:pipe -f:msmq -f:httpReinicie el equipo.
Para ejecutar SMConfigInstaller.exe en un equipo que ejecuta un sistema operativo de 64 bits, siga estos pasos:
En un símbolo del sistema de 64 bits, escriba el siguiente comando y, a continuación, presione ENTRAR:
%windir%\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\SMConfigInstaller.exe -c:install -f:tcp -f:pipe -f:msmq -f:httpEn un símbolo del sistema de 32 bits, escriba el siguiente comando y, a continuación, presione ENTRAR:
%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMConfigInstaller.exe -c:install -f:tcp -f:pipe -f:msmq -f:httpReinicie el equipo.