2009-08-01 20 views
5

¿Alguien ha tenido alguna experiencia con las extensiones de servicios web? Pasé un tiempo tratando de hacer una extensión del servicio web a partir de los ejemplos de MS.Interceptar mensajes en un cliente de WCF

Tengo un cliente de servicio web .net 3.5, creado al agregar una referencia al WSDL, a través del VS IDE "Proyecto> Agregar referencia de servicio". Esto construyó mi cliente de servicio web, y todo funciona bien.

Necesito interceptar el cuerpo de solicitud y respuesta para mi cliente del servicio web. He encontrado muchas referencias a las extensiones de servicios web, pero estoy teniendo un ataque de los cansados, y simplemente no puedo hacer que mis extensiones se disparen.

He utilizado el ejemplo de MS desde aquí "Cómo implementar una extensión SOAP" (http://msdn.microsoft.com/en-us/library/7w06t139.aspx), que crea un registrador para las secuencias de solicitud/respuesta.

El artículo MS relacionados "Jabón mensaje de modificación" (http://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx) muestra cómo habilitar la extensión SOAP para el cliente web:

Aplicación de la extensión SOAP

Hay dos formas de ejecutar una extensión SOAP en una aplicación cliente o servidor. Primero, puede configurar la aplicación para ejecutar la extensión. Para configurar su extensión SOAP para que se ejecute en todos los métodos web en todos los servicios web, especialmente en una vroot, edite la sección Elemento <soapExtensionTypes> dentro del archivo Web.config. El siguiente código muestra que el valor de atributo de tipo debe estar en una línea e incluir el nombre completo de la extensión, más la versión, cultura y token de clave pública del ensamblado firmado.

< configuración >
<system.web>
<webServices>
<soapExtensionTypes>
< tipo add = "Contoso.MySoapExtension, versión = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" priority = "1" group = "0"/>
</soapExtensionTypes >
</webservices >
</system.web>
</configuración >

he compilado la TraceExtension en su propia biblioteca de clases, y se hace referencia en el web.config del servicio web proyecto de este modo:

< complemento type = "TraceExtension, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = ef8757fac167b8d8" priority = "1" group = "Alto "/ >

No joy. No se registra nada, no se golpean puntos de interrupción.

Luego eliminé la clase referenciada y dejé caer el código fuente en el proyecto del servicio web.

He intentado añadir una referencia a él como tal (mi espacio de nombres es ServcieTest001):

< Agregar tipo = "ServiceTest001.TraceExtension" group = "alta" prioridad = "1"/>

Utilicé el siguiente hilo como guía para habilitar la extensión "obtener-raw-soap-data-from-a-web-reference-client-running-in-asp-net" (http://stackoverflow.com/questions/300674/getting-raw-soap-data-from-a-web-reference-client-running-in-asp-net).

Todavía no hay alegría. Luego copié el código del hilo anterior y todavía no puedo hacer que la extensión se dispare cuando realizo una solicitud SOAP.

¿Alguien me puede indicar un proyecto de demostración de la extensión del servicio web para descargar, así que puedo desmontarlo y resolver lo que me falta?

Respuesta

12

John tiene razón, puede interceptar los mensajes en el cliente utilizando un comportamiento de cliente personalizado que implemente IClientMessageInspector. Vea How To: Inspect or Modify Messages on the Client en MSDN.

Lo único 'complicado' es que si planea modificar el mensaje cuerpo, primero deberá crear una copia del mensaje original. Ver Using the Message Class para los detalles pegajosos.

0

Es probable que desee descansar un poco.

Nunca desea usar WSE. WSE está obsoleto.

No desea utilizar los servicios web ASMX: ahora Microsoft los considera tecnología "heredada" y no corregirá errores. Por cierto, WSE está basado en ASMX, así que, ¿qué es eso?


Solo desea trabajar con Windows Communication Foundation. El WCF Development Center en MSDN está en http://msdn.microsoft.com/wcf/.

Diviértete, y mantente alejado de las cosas desagradables, antiguas y obsoletas.

+2

Ojalá pudiera utilizar wcf ... Es un servicio web heredado (no .net) al que me estoy conectando, que utiliza un esquema de cifrado personalizado. Es por eso que estoy tratando de construir la extensión del servicio web. –

0

Sí, estaba demasiado cansado.

I think las extensiones de servicio web funcionan con "referencias web" (.net 2), no "referencias de servicio" (.net 3).

Así que supongo que debo modificar mi pregunta: ¿cómo puedo interceptar la solicitud y la respuesta de un .NET 3 "Referencia de servicio" conectado a un servicio web heredado?

Cuestiones relacionadas