2011-04-15 11 views
13

? Estoy confundido con el concepto de publicación de metadatos.¿Qué sucede si configuro HttpGetEnabled = false

Si en un archivo de configuración de servicio WCF que había escrito:

<serviceMetadata httpGetEnabled="false"/> 

No importa que es verdadero o falso. Cuando traté de dar una referencia de servicio en una aplicación cliente usando "Agregar referencia de servicio ..." y hice clic en "Descubrir", puedo recuperar la Referencia de servicio.

Pero cuando se retiran las dos líneas siguientes: -

<endpoint address="mex" binding="mexBasicHttpBinding" contract="IMetadataExchange"/> 

<serviceMetadata httpGetEnabled="false"/> 

Ahora, después de que cuando traté de darle referencia en una aplicación cliente utilizando "Agregar referencia de servicio ...." y hacer clic en "Discover", Estoy NO capaz de recuperar la referencia de servicio ....

Ahora alguien me puede decir lo que significa exactamente. Por qué después de configurarlo False aún permite establecer la referencia. Y por qué después de eliminar esas líneas no está permitiendo establecer la referencia.

-Anil

Respuesta

21

MEX y WSDL son dos esquemas diferentes para informar a los clientes potenciales sobre la estructura de su servicio. Por lo tanto, puede optar por hacer públicos sus contratos de servicio como "formato de intercambio de metadatos" (MEX) o en "web service description language" (WSDL), al que se puede acceder a través de HTTP (s).

Por lo tanto, para generar proxies, necesita información de metadatos. Cuando eliminas la línea serviceMetadata, dices que no estás proporcionando metadatos en formato WSDL.

Pero la línea anterior, la publicación de sus metadatos en MEX, aún está activa, por lo tanto, puede generar un proxy a partir de esos metadatos.

De esto se deduce que cuando no se proporciona información WSDL ni MEX con formato, no se puede generar un proxy.

Como Joel C señaló correctamente, las fijaciones son un (casi) concepto ortogonal. Si permite que los clientes hablen con usted a través de HTTP básico, ws HTTP, tuberías con nombre neto o bolas de cristal, no depende de cómo publique sus servicios.

El WCF security guidance project y/o el MS "practises and patterns" for WCF security pueden proporcionar una visión más profunda.

+0

gracias despejó muchas dudas .... –

+0

Mi placer. :) – Cornelius

+0

No estoy seguro de si esto responde la pregunta: _ "¿Qué sucede si configuro HttpGetEnabled = false?" _, ¿O sí? –

5

Has añadido una referencia de servicio, lo que genera un proxy basado en intercambio de metadatos (MEX). La configuración httpGetEnabled le permite establecer un punto final http que permitiría generar un proxy no-mexicano utilizando WSDL, como un proxy de servicio web .NET heredado. Son diferentes protocolos, controlados por diferentes configuraciones. Creo que si tuviera <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/SampleService?wsdl"/> podría agregar una referencia de servicio web de .NET 2.0, que no podría hacer con la configuración <serviceMetadata httpGetEnabled="false"/>.

+0

Eso significa que al especificar "httpGetEnabled = true" hará que mi servicio WCF también se consuma como servicio web. Si es así, ¿para qué sirve "BasicHttpBinding"? Como la principal ventaja de usar BasicHttpBinding es hacer que su Servicio WCF esté disponible para la versión anterior y pueda ser consumido como servicio web (característica llamada compatibilidad hacia atrás, supongo, no estoy muy seguro), ¿podría decirnos exactamente qué? diferencia/correlación entre "HttpGetEnabled" y "BasicHttpBinding".Si están co-relacionados entonces por qué deberíamos usar la línea "HttpGetEnabled = true" cuando estoy usando "WsHttpBinding" –

+2

Cómo se comunica su servicio WCF con otros procesos (su enlace de punto final) y cómo expone los metadatos sobre sí mismo (su configuración de metadatos)) son independientes el uno del otro. Tiene sentido exponer los metadatos como WSDL (usando 'httpGetEnabled =" true "' y un 'httpGetUrl') si planea acceder al servicio como un servicio web SOAP (usando un punto final configurado con' WsHttpBinding'), cualquiera de los dos puede ser utilizado sin el otro. –

+0

Entonces por qué después de la eliminación de las dos líneas siguientes: - por qué es no permitir me da una referencia en una aplicación cliente. (No quiero usarlo como servicio web) Siento que la exposición de los Metadatos de Servicio está relacionada con la Comunicación de WCF. Como sin metadatos el cliente no puede establecer comunicación. Como la aplicación del cliente debe conocer el tipo y el otro componente del servicio para establecer la comunicación que sea posible con los metadatos solo –

Cuestiones relacionadas