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 ".

¿Fue útil?

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));

http: // MSDN .microsoft.com / es-es / library / microsoft.web.services3.addressing.endpointreference.via.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top