WSE3 Destination vs URL
-
20-09-2019 - |
Frage
Ich habe einen Verkäufer mir zu sagen, dass die SOAP-Header nicht in ihm https sollten, sondern dass wir noch über SSL kommunizieren können. Unser Anliegen ist es, dass wir über SSL und dass ihre Beispielcode kommunizieren möchten, so dass es nicht geschehen.
In ihrem Beispielprogramm geben sie diesen Code:
if (valservice.Url.StartsWith("https"))
{
valservice.Destination = new Microsoft.Web.Services3.Addressing.EndpointReference(
new Uri(valservice.Url.Replace("https:", "http:")));
}
es bricht in kleinere Stufen hinunter, und das Hinzufügen einiger Debug, so scheint es, dass, wenn Sie das Ziel ändern, dass die URL automatisch ändert.
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);
}
Ausgabe:
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
Frage: Ist es möglich, eine andere URL im Ziel als die URL zu haben? Wenn das so ist, wie?
Auch wenn ich die URL nach der Aktualisierung des Ziel zurückgesetzt, das Ziel wird ebenfalls geändert. Scheint, wie die beiden irgendwie miteinander verbunden und nicht anders sein können?
Danke,
Neal Walters
Update 1: Einige Untersuchungen zeigen, dass sich der Anbieter in der Lage könnte die SoapActor Attribut , um ihre Website hinzuzufügen.
Wenn wir https in der URL haben, geben sie diesen Fehler:
Der Header muss das Match Schauspieler URI-Wert des Web-Service. Der Schauspieler URI-Wert kann explizit sein mit SoapActorAttribute angegeben auf die ASMX-Klasse. In Abwesenheit von der Attribut wird der Schauspieler URI angenommen gleich die HTTP-Request-URL die eingehende Nachricht. der Header erhielt enthalten " https://somesite.net/orgid/SomeApp/SomeService.asmx " während der Empfänger erwartet " http://somesite.net/orgid/SomeApp/SomeService.asmx ".
Lösung
Die Probe des Herstellers war in der Tat falsch und nicht SSL. Die Lösung war die „VIA“ Parameter an den Konstruktor des Endpunkts hinzuzufügen:
valservice.Destination =
new Microsoft.Web.Services3.Addressing.EndpointReference(
new Uri(valservice.Url.Replace("https:", "http:")),
new Uri(valservice.Url));