Tengo que consumir un servicio proporcionado por uno de nuestros socios. Me dieron poca dirección, pero me dijeron que la seguridad iba a ser PasswordDigest. Lo busqué e inmediatamente vi muchas referencias a WSE, así que me fui. Fue muy fácil de implementar y en poco tiempo tuve un token de usuario WSE estándar usando PasswordDigest en los encabezados SOAP de mis mensajes.agregando encabezados http en llamada al servicio SoapHttpClient
Cuando comenzamos a probar hoy, inmediatamente me dijeron (por el mensaje de error) que las cosas no estaban bien. Resulta que nuestro socio no mira en el encabezado SOAP, sino que quiere la información de seguridad en el encabezado http.
He visto muchos artículos sobre cómo agregar encabezados http personalizados a una clase de proxy, pero mi proxy hereda de SoapHttpClientProtocol que no tiene una colección de encabezados para agregar. Estaba buscando hacer una httpWebRequest en bruto, pero tengo un método específico de acceso que tiene algunos parámetros complejos para tratar (y además se siente como contraseñas).
¿Cuál es la mejor manera de agregar encabezados http personalizados a una clase proxy de servicio que no tiene un método GetWebRequest?
Como referencia:
Proxy clase decleration:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MtomServiceSoap11", namespace="http://ws.xxxxxxx.com/")]
public partial class MtomServiceService : System.Web.Services.Protocols.SoapHttpClientProtocol {
método de destino Necesito llamar:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("uploadDocumentResponse", Namespace="http://ws.edsmtom.citizensfla.com/")]
public uploadDocumentResponse uploadDocument([System.Xml.Serialization.XmlElementAttribute(Namespace="http://ws.xxxxxxx.com/")] uploadDocumentRequest uploadDocumentRequest) {
object[] results = this.Invoke("uploadDocument", new object[] {
uploadDocumentRequest});
return ((uploadDocumentResponse)(results[0]));
}
}
La llamada real al servicio es simple . Los objetos que pasan no son:
request.criteria = docCriteria;
request.document = document;
var result = service.uploadDocument(request);
Gracias.
por favor no dude en marcar su propia respuesta – Snowbear