¿Puedo agregar un encabezado SOAP personalizado en los mensajes entrantes/salientes de WCF en basicHttpBinding, como que podemos agregar un encabezado de autenticación personalizado en los servicios web ASMX? El encabezado SOAP personalizado debe ser accesible usando clientes de servicio web .net 2.0/1.1 (accesible mediante la herramienta WSDL.EXE).Cómo agregar encabezados de soap personalizados en wcf?
Respuesta
Eche un vistazo al WCF Extras en Codeplex - es una biblioteca de extensión fácil para WCF que ofrece, entre otras cosas, encabezados SOAP personalizados.
Otra opción es usar WCF message contracts en su servicio WCF, esto también le permite definir y establecer fácilmente encabezados SOF WCF.
[MessageContract]
public class BankingTransaction
{
[MessageHeader]
public Operation operation;
[MessageHeader]
public DateTime transactionDate;
[MessageBodyMember]
private Account sourceAccount;
[MessageBodyMember]
private Account targetAccount;
[MessageBodyMember]
public int amount;
}
Aquí, la "operación" y la "fecha de transacción" se definen como encabezados SOAP.
Si ninguno de esos métodos ayuda, entonces debería verificar el concepto de inspectores de mensajes WCF que puede escribir como extensiones. Le permiten, por ejemplo, Inyectar ciertos encabezados en el mensaje en cada llamada saliente en el cliente y recuperarlos del mensaje en el servidor para su uso.
Vea esta publicación de blog Handling custom SOAP headers via WCF Behaviors para obtener un punto de partida sobre cómo escribir un inspector de mensajes y cómo incluirlo en la configuración de su proyecto.
el lado del cliente IClientMessageInspector
define dos métodos BeforeSendRequest
y AfterReceiveReply
mientras que el lado del servidor IDispatchMessageInspector
tiene los métodos opuestos, es decir AfterReceiveRequest
y BeforeSendReply
.
Con esto, podría agregar encabezados a cada mensaje que pasa por el cable (o selectivamente solo a unos pocos).
He aquí un fragmento de un implementador IClientMessageInspector
que utilizamos para transmitir automagicamente la información local (idioma y la información de la cultura) frente a los clientes al servidor - que debe dar una idea de cómo empezar:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
International intlHeader = new International();
intlHeader.Locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName;
MessageHeader header = MessageHeader.CreateHeader(WSI18N.ElementNames.International, WSI18N.NamespaceURI, intlHeader);
request.Headers.Add(header);
return null;
}
En el lado del servidor, entonces verificaría la presencia de esos encabezados, y si están presentes, extráigalos del sobre SOAP y úselos.
ACTUALIZACIÓN: bien, estás clientes están en .NET 2.0 y no utilizando WCF - buena noticia es que esto todavía debería funcionar bien - ver esta entrada del blog Custom SOAP Headers: WCF and ASMX para más detalles. Todavía puede usar el inspector de mensajes del lado del servidor para olfatear y extraer los encabezados personalizados que envían sus clientes .NET 2.0.
Gracias marc_s, traté de usar WCF Extras, agregué el atributo "XmlSerializerFormat" al Service Contract WCF Extras arrojó un error al acceder a los Servicios. ¿Hay alguna otra solución disponible como WCF Extras? ¿Puedo agregar MessageContract como atributo a todos los métodos cuando agregué SoapHeader en servicios ASMX? Mi requisito es que debo enviar algunos datos (el mismo nombre de usuario y contraseña) para cada llamada al servicio WCF. ¿Hay alguna forma de implementar esto? – nRk
yah marc_s, se ve genial. pero en el artículo mencionado el cliente debería estar en .NET 3.0 o superior ... pero en mi caso, los clientes están en .net 2.0 y 1.1. ¿Todavía es posible implementar este? – nRk
- 1. JAX-WS - Agregar encabezados SOAP
- 2. Agregar encabezados HTTP personalizados usando JavaScript
- 3. Cómo agregar encabezados SOAP al cliente Spring Jax-WS?
- 4. Cómo agregar encabezados personalizados a la clase SMTP de System.Net.Mail?
- 5. Cómo agregar encabezados http en espuma 0.3.6?
- 6. WCF Soap Actions en el encabezado HTTP o encabezado SOAP?
- 7. Cómo agregar encabezados SOAP a una solicitud SOAP utilizando JAX-WS?
- 8. Agregar encabezados Http personalizados al proxy de servicio web
- 9. Cómo establecer encabezados personalizados en PHP
- 10. Cómo codificar encabezados HTTP personalizados en C#
- 11. ¿Cómo puedo enviar encabezados personalizados con URLRequest
- 12. Encabezados personalizados en Amazon S3
- 13. Encabezados personalizados con pycurl
- 14. Cómo crear encabezados de correo electrónico personalizados
- 15. Firma digital para mensaje SOAP en WCF
- 16. WCF and Soap 1.1
- 17. Agregue encabezados personalizados utilizando HttpWebRequest
- 18. cómo establecer encabezados usando node-soap en node.js
- 19. WPF Datagrid vinculando encabezados de columna personalizados
- 20. Cómo agregar el encabezado soap en java
- 21. Delphi Soap Envelope y WCF
- 22. ¿Cómo se cambia el esquema SOAP Envelope en WCF?
- 23. Agregar encabezados SOAP para el servicio web HTTP Endpoint de SQL 2005 en Visual Studio 2008
- 24. Servicio WCF SOAP 1.2 esperando contenido SOAP 1.1 tipo
- 25. Encabezados de correo personalizados usando MIME en Java
- 26. Servicio WCF, respuesta en SOAP o XML simple, ¿cómo?
- 27. ¿Agregar mensajes personalizados en assert?
- 28. ¿Su cliente de correo electrónico le permite agregar encabezados personalizados programáticamente?
- 29. Servicio WCF REST y SOAP sin WebServiceHostFactory
- 30. WCF y varios encabezados de host
actualizó mi respuesta con información sobre los inspectores de mensajes –
actualicé mi respuesta nuevamente con información sobre la interoperabilidad de ASMX/WCF con respecto al header SOAP –
gracias marc_s, esto se ve bien, lo intentaré. – nRk