Domanda

Ho un fornitore che mi dice che l'header SOAP non dovrebbe avere https in essa, ma che possiamo ancora comunicare via SSL. La nostra preoccupazione è che vogliamo comunicare tramite SSL e che il loro codice di esempio sta causando non accada.

Nel loro programma di esempio, che forniscono questo codice:

    if (valservice.Url.StartsWith("https"))
    {
        valservice.Destination = new Microsoft.Web.Services3.Addressing.EndpointReference(
            new Uri(valservice.Url.Replace("https:", "http:")));
    } 

Da suddivisione in piccoli passi, e l'aggiunta di un po 'di debug, sembra che quando si cambia la destinazione, che l'URL cambia automaticamente.

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

Output:

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

Domanda: E 'possibile avere un URL diverso nella destinazione che l'URL? Se é cosi, come?

Inoltre, se a reimpostare l'URL dopo l'aggiornamento della destinazione, la destinazione anche viene cambiato. Sembra che i due sono in qualche modo legati gli uni agli altri e non può essere diverso?

Grazie,

Neal Walters

Aggiornamento 1: Alcune ricerche indicano che il venditore potrebbe essere in grado di aggiungere il attributo SoapActor per il loro sito.

Quando abbiamo https nell'URL, che questo errore:

  

L'intestazione deve corrispondere al   attore valore URI del servizio web.   Il valore URI attore può essere esplicitamente   specificata utilizzando SoapActorAttribute su   la classe ASMX. In assenza della   attributo, l'attore URI si presume   pari alla richiesta HTTP URL di   il messaggio in arrivo. l'intestazione   ricevuto contenute   " https://somesite.net/orgid/SomeApp/SomeService.asmx "   mentre il ricevitore si aspetta   " http://somesite.net/orgid/SomeApp/SomeService.asmx ".

È stato utile?

Soluzione

Il campione del fornitore era davvero sbagliato e che non utilizzano SSL. La soluzione era quella di aggiungere il parametro "VIA" per il costruttore del punto finale:

 valservice.Destination =
            new Microsoft.Web.Services3.Addressing.EndpointReference(
                new Uri(valservice.Url.Replace("https:", "http:")), 
                new Uri(valservice.Url));

http: // msdn .microsoft.com / en-us / library / microsoft.web.services3.addressing.endpointreference.via.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top