Error de equilibrio de carga con servicio WCF - NLB
-
19-08-2019 - |
Pregunta
ACTUALIZACIÓN 3:
Creé un proyecto de prueba de Visual Studio 2008 e intenté crear una referencia de servicio a la referencia de servicio WCF de sitio compartido y recibí el siguiente error:
Se produjo un error al descargar ' http: //apps.mydomain/MyService.svc '. La solicitud falló con el estado HTTP 400 Petición Incorrecta. Los metadatos contienen un referencia que no se puede resolver: ' http: //apps.mydomain/MyService.svc '. Tipo de contenido application / soap + xml; charset = utf-8 no fue compatible con Servicio http: //apps.mydomain/MyService.svc '. Los enlaces de cliente y servicio pueden ser no coinciden El servidor remoto regresó un error: (415) No se puede procesar el mensaje porque el tipo de contenido 'aplicación / jabón + xml; juego de caracteres = utf-8 ' no era el tipo esperado 'text / xml; charset = utf-8 '.. Si el servicio es definido en la solución actual, intente construyendo la solución y agregando el referencia de servicio nuevamente.
ACTUALIZACIÓN 2:
@Nick: probé su sugerencia de establecer explícitamente la dirección de cada punto final con la ruta totalmente calificada de cada servidor y sigo obteniendo el mismo resultado.
Además, cuando intento configurar el atributo listenUri con la URL del sitio compartido, recibo un error de solicitud incorrecta 400 en lugar de un error 404.
ACTUALIZACIÓN
Después de una investigación adicional, hubo algunos conflictos de configuración de IIS entre http: //apps1.mydomain y http: //apps2.mydomain y pudo superar el " Aplicación de servidor no disponible " error.
Ahora recibo un error 404 cuando intenté navegar hacia el sitio compartido ( http: //apps.mydomain ), pero puedo navegar a http: //apps1.mydomain y http: //apps2.mydomain referencia de servicio.
Problema original
Mi empresa utiliza Microsoft NLB para cargar el tráfico de equilibrio entre nuestro Servidores IIS. Recientemente implementé un servicio WCF en cada servidor IIS 6 Windows Server 2003 Standard Edition SP1. Recibí el siguiente error cuando intenté buscar el nombre de dominio compartido usando IE 7:
Aplicación de servidor no disponible aplicación web que está intentando el acceso en este servidor web es actualmente indisponible. Presiona & Quot; Actualizar & Quot; botón en su navegador web para volver a intentar tu petición.
Nota del administrador: un mensaje de error detallando la causa de este específico solicitud de error se puede encontrar en el registro de eventos de la aplicación de la web servidor. Por favor revise esta entrada de registro para descubrir qué causó este error ocurrir.
El consumidor apuntará a http: //apps.mydomain para usar el servicio, pero el dominio virtual está asignado a http: //apps1.mydomain o http: //apps2.mydomain . Si busco el servicio en cada servidor, no recibo ese error.
El servicio actualmente está utilizando un anónimo basicHttpBinding.
¿Alguien más ha experimentado este problema?
Historial
Antes de que este error comenzara a ocurrir, recibí el siguiente error cuando cambié a los tres nombres de dominio ( http: //apps.mydomain , http: //apps1.mydomain , http: //apps2.mydomain ):
Esta colección ya contiene un dirección con esquema http. Allí pueden ser como máximo una dirección por esquema en esta colección.
Utilicé la ServiceHostFactory clase para personalizar mi archivo .svc para especificar una fábrica de servicios personalizados. Luego creo nuestra fábrica personalizada heredando de ServiceHostFactory y anulando según sea necesario.
public class MyFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new ServiceHost(serviceType, baseAddresses[0]);
}
}
<%@ ServiceHost Language="C#" Factory="MyFactory" Debug="true" Service="MyService" CodeBehind="~/App_Code/MyService.cs" %>
Solución
Después de experimentar con diferentes configuraciones para mi servicio WCF y la aplicación de consumo. Creé una referencia de servicio a una de las referencias de servicio en funcionamiento ( http: //apps1.mydomain o http: //apps2.mydomain ) en la aplicación consumidora. Luego cambié la referencia del punto final en la configuración del cliente para que apunte a la dirección WCF del sitio compartido ( http: //apps.mydomain ) y pude consumir y utilizar el servicio.
Otros consejos
He tenido un problema antes con WCF y el equilibrio de carga donde los servidores tenían múltiples tarjetas de red con diferentes direcciones IP y WCF simplemente mostraba la primera dirección IP que encontró. Tuvimos que establecer explícitamente la dirección IP en la definición de servicio de cada servidor para que WCF se uniera a la correcta.