WSE3 Destinazione vs URL
-
20-09-2019 - |
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 ".
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));