wcf - refused - tcp connection error 10061 hercules
WCF-> ASMX y cookies (1)
Ok, entonces hay dos cosas principales que deben ocurrir:
- Obtenga la cookie del contexto de la aplicación web para el servicio WCF
- Obtenga la cookie del servicio WCF para el servicio ASMX
NOTA: Como no especificó, supongo que está utilizando un cliente WCF dentro de su servicio WCF para hablar con el servicio ASMX. Si este no es el caso, háganmelo saber y revisaré esta publicación en consecuencia.
Paso 1:
Recomendaría escribir un IClientMessageInspector que vincule a los puntos finales de su cliente utilizando un IEndpointBehavior . En su implementación de IClientMessageInspector :: BeforeSendRequest , básicamente lee la cookie de la colección actual HttpContext :: Request :: Cookies y anexa el valor como un encabezado de mensaje. Eso se vería algo así como esto:
public void BeforeSendRequest(ref Message request, IClientChannel channel)
{
// Get the cookie from ASP.NET
string cookieValue = HttpContext.Current.Request.Cookies["MyCookieName"].Value;
// Create a header that represents the cookie
MessageHeader myCookieNameHeader = MessageHeader.CreateHeader("MyCookieHeaderName", "urn:my-custom-namespace", cookieValue);
// Add the header to the message
request.Headers.Add(myCookieNameHeader);
}
Una vez que configure el punto final con este inspector de mensajes, cada solicitud lógica transferirá automáticamente el valor de la cookie como un encabezado a su servicio WCF. Ahora, dado que su servicio WCF en realidad no se preocupa por el encabezado en sí, básicamente puede ignorarlo. De hecho, si solo hiciste este paso, deberías poder ejecutar todo tu código ahora mismo y no experimentar ninguna diferencia.
Paso 2:
Ahora necesitamos la cookie para pasar del servicio WCF al servicio ASMX. Una vez más, todo lo que necesita hacer es implementar un IClientMessageInspector , excepto que BeforeSendMessageRequest va a ser un poco diferente:
public void BeforeSendRequest(ref Message request, IClientChannel channel)
{
// Get the cookie value from the custom header we sent in from step #1
string cookieValue = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("MyCookieHeaderName", "urn:my-custom-namespace");
HttpRequestMessageHeaderProeperty httpRequestMessageHeaderProperty;
MessageProperties outgoingMessageProperties = OperationContext.Current.OutgoingMessageProperties;
// Get the HttpRequestMessageHeaderProperty, if it doesn''t already exist we create it now
if(!outgoingMessageProperties.TryGetValue(HttpRequestMessageHeaderProperty.Name, out httpRequestMessageHeaderProperty))
{
httpRequestmessageHeaderProperty = new HttpRequestMessageHeaderProperty();
outgoingMessageProperties.Add(HttpRequestMessageHeaderProperty.Name, httpRequestmessageHeaderProperty);
}
// Set the cookie header to our cookie value (note: sample assumes no other cookies set)
httpRequestmessageHeaderProperty.Headers[HttpRequestHeader.Cookie] = cookieValue;
}
Una vez más, debe vincular esto al punto final de su servicio ASMX utilizando un IEndpointBehavior y cada solicitud lógica que haga pasará automáticamente la cookie.
Tengo una aplicación web que se comunica con un servicio de WCF a través de un cliente de WCF. En el momento en que se invoca mi código, se han emitido cookies de autenticación y tengo una dependencia en un servicio ASMX que espera esas cookies de autenticación.
Necesito pasar las cookies de la aplicación web a través del cliente WCF al servicio WCF al servicio ASMX.
¿Algunas ideas? Parece que mi mejor opción es establecer allowCookies en falso, analizar los encabezados de las cookies, intentar volver a crearlos en el servicio WCF y luego adjuntarlos a la solicitud SOAP.
Nota: Miré este artículo , que parece cercano pero no del todo aplicable a esta pregunta. En el escenario vinculado, un servicio ASMX está creando cookies, que deben ser conservadas en un servicio ASMX posterior por el mismo cliente WCF.