WSE3 Destino vs URL
-
20-09-2019 - |
Pregunta
Tengo un vendedor me dice que el encabezado SOAP no debe tener https en ella, pero que aún podemos comunicar a través de SSL. Nuestra preocupación es que queremos comunicar a través de SSL y que su código de ejemplo está causando que no suceda.
En su programa de ejemplo, que proporcionan este código:
if (valservice.Url.StartsWith("https"))
{
valservice.Destination = new Microsoft.Web.Services3.Addressing.EndpointReference(
new Uri(valservice.Url.Replace("https:", "http:")));
}
A partir de lo descomponen en pasos más pequeños, y la adición de un poco de depuración, parece que cuando se cambia el destino, que la URL cambia automáticamente.
if (valservice.Url.StartsWith("https"))
{
// fix the endpoint just in case (usually not necessary)
//original code is just this next line
//valservice.Destination = new Microsoft.Web.Services3.Addressing.EndpointReference(
// new Uri(valservice.Url.Replace("https:", "http:")));
//test code
string holdOriginalURL = valservice.Url;
Response.WriteLine("1 URL=" + valservice.Url);
Response.WriteLine("1 Destination=" + valservice.Destination);
Response.WriteLine("1 Destination.Address.Value=" + valservice.Destination.Address.Value);
Response.WriteLine("1 Destination.TransportAddress=" + valservice.Destination.TransportAddress);
//test
string newURL = valservice.Url;
newURL = newURL.Replace("https:", "http:");
//valservice.Destination = new Microsoft.Web.Services3.Addressing.EndpointReference(
// new Uri(newURL));
Microsoft.Web.Services3.Addressing.EndpointReference tempEndPoint = new Uri(newURL);
valservice.Destination = tempEndPoint;
//valservice.Url = holdOriginalURL;
Response.WriteLine("2 URL=" + valservice.Url);
Response.WriteLine("2 Destination=" + valservice.Destination);
Response.WriteLine("2 Destination.Address.Value =" + valservice.Destination.Address.Value);
Response.WriteLine("2 Destination.TransportAddress=" + valservice.Destination.TransportAddress);
}
Salida:
1 URL=https://someaddress.net/orgid/SomeApplication/SomeService.asmx
1 Destination.Address.Value=https://someaddress.net/orgid/SomeApplication/SomeService.asmx
1 Destination.TransportAddress=https://someaddress.net/orgid/SomeApplication/SomeService.asmx
2 URL=http://someaddress.net/orgid/SomeApplication/SomeService.asmx
2 Destination.Address.Value=http://someaddress.net/orgid/SomeApplication/SomeService.asmx
2 Destination.TransportAddress=http://someaddress.net/orgid/SomeApplication/SomeService.asmx
Pregunta: ¿Es posible tener una URL diferente en el destino de la URL? ¿Si es así, cómo?
Además, si se restablece la URL después de actualizar el destino, el destino también se cambia. Parece que los dos están de alguna manera vinculados entre sí y no pueden ser diferentes?
Gracias,
Neal Walters
Actualización 1: Algunas investigaciones indican que el vendedor podría ser capaz de añadir el atributo SoapActor a su sitio.
Cuando tenemos https en la URL, que dará este error:
El encabezado debe coincidir con el el actor valor URI del servicio web. El valor URI actor puede ser explícita especificada utilizando SoapActorAttribute en la clase ASMX. En ausencia de la atribuir, el actor URI se supone que es ser igual a la petición HTTP Url el mensaje entrante. la cabecera recibido contenido " https://somesite.net/orgid/SomeApp/SomeService.asmx " mientras que el receptor está a la espera " http://somesite.net/orgid/SomeApp/SomeService.asmx ".
Solución
La muestra del proveedor era de hecho mal y no mediante SSL. La solución fue añadir el parámetro "a través de" al constructor del punto final:
valservice.Destination =
new Microsoft.Web.Services3.Addressing.EndpointReference(
new Uri(valservice.Url.Replace("https:", "http:")),
new Uri(valservice.Url));