2010-03-02 12 views
7

Similar a la limitación del servidor web de desarrollo de Visual Studio (Cassini) que solo tiene servidores en localhost, tengo una implementación del Servicio WCF que solo es necesaria en localhost.Configurar WCF para escucha solo en LOCALHOST

No me importaría que otras máquinas tengan acceso, excepto que el Firewall de Windows le pide al programa que escuche en la NIC que mira hacia afuera. Como esto solo es necesario internamente, prefiero restringir la configuración del lado del servidor WCF para que no dispare el detector de firewall.

¿Es binding.HostNameComparisonMode = HostNameComparisonMode.Exact la solución correcta? No veo cómo esto es suficiente.

====

Como Cassini, esta implementación de servicios es un sustituto de otra cosa que no requieren la comunicación de red. El cliente puede configurarse para conectarse al servidor real o la implementación falsa ejecutándose en localhost.

Respuesta

0

Depende de cómo lo esté alojando. Si está en IIS7 o WAS, WCF utiliza el modo de coincidencia de IIS. De lo contrario, si usa HostNameComparisonMode.Exact, entonces sí, el nombre de host siempre será un factor crítico en la coincidencia. Si el nombre de host no coincide, el envío generalmente fallará.

Debe tenerse en cuenta que la exactitud no es 100% perfectamente exacta ... todavía permite alguna variación en el nombre de host. Si tiene un nombre de host de NetBios y un nombre de DNS completo, la coincidencia aún se producirá, ya que WCF trata esos dos como uno y el mismo.

System.ServiceModel.BasicHttpBinding.HostNameComparisonmode

+0

He intentado el enlace.HostNameComparisonMode = HostNameComparisonMode.Exact nuevamente y no está funcionando. Después de eliminar las reglas de firewall de Windows relacionadas, el firewall solicita nuevamente para permitirlo. –

+0

También he agregado un 'nuevo Uri (" net.tcp: // localhost ")' como una dirección base para el constructor ServiceHost –

+0

Bueno, parece que el firewall le preguntará independientemente de si se trata de un host de bucle invertido o no. No estoy seguro de si hay algo que pueda hacer al respecto, que no sea el uso de Named Pipes. – jrista

6

creo que se está acercando por el camino equivocado. Debería utilizar el enlace de canalización con nombre, que debe admitir cualquier patrón de intercambio de mensajes que esté utilizando (admite la solicitud-respuesta, así como los mismos modos de estado de sesión y concurrencia que admite WS).

Desde la sección de MSDN titulado "Choosing a Transport" (el énfasis es mío):

cuándo usar el nombre de Transporte de tuberías

una tubería con nombre es un objeto en el núcleo de Windows sistema operativo, tales como una sección de memoria compartida que los procesos pueden usar para la comunicación. Una tubería con nombre tiene un nombre y se puede usar para la comunicación unidireccional o dúplex entre procesos en una sola máquina.

Cuando se requiere la comunicación entre diferentes aplicaciones WCF en un solo equipo, y desea evitar cualquier comunicación desde otra máquina , a continuación, utilizar las canalizaciones con nombre transporte. Una restricción adicional es que los procesos que se ejecutan desde Windows Escritorio remoto pueden estar restringidos a la misma sesión de Windows Remote Desktop a menos que tengan privilegios elevados de .

Esto cumple con sus requisitos exactos y no debe ser más que un cambio de configuración.

+0

de acuerdo; "solo localhost" es realmente "comunicación entre procesos", y las tuberías con nombre son las mejores para eso. – Randolpho

+0

Lo siento, lo aclararé: al igual que Cassini, esta implementación del Servicio es un sustituto de otra cosa que REQUIERE comunicación de red. El cliente puede configurarse para conectarse al servidor real o la implementación falsa ejecutándose en localhost. –

+0

@Jason: Si el cliente puede configurarse, ¿por qué no configurarlo para usar un punto final de Named Pipe en lugar de un punto final Http? Como WCF es capaz de ambas cosas, y llamar a un servicio a través de pipe vs. http es lo mismo para WCF ... ¿por qué molestarse con algo más? – jrista

Cuestiones relacionadas