Пункт назначения WSE3 против URL
-
20-09-2019 - |
Вопрос
У меня есть поставщик, который говорит мне, что в заголовке SOAP не должно быть https, но что мы все еще можем общаться через SSL.Нас беспокоит то, что мы хотим общаться через SSL и что их пример кода приводит к тому, что этого не происходит.
В своем примере программы они предоставляют этот код:
if (valservice.Url.StartsWith("https"))
{
valservice.Destination = new Microsoft.Web.Services3.Addressing.EndpointReference(
new Uri(valservice.Url.Replace("https:", "http:")));
}
Разбив его на более мелкие этапы и добавив некоторую отладку, кажется, что когда вы меняете пункт назначения, URL-адрес автоматически меняется.
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);
}
Выходной сигнал:
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
Вопрос: Возможно ли, чтобы URL-адрес назначения отличался от URL-адреса?Если да, то каким образом?
Кроме того, если я сброшу URL-адрес после обновления пункта назначения, пункт назначения также изменится.Похоже, что эти два понятия каким-то образом связаны друг с другом и не могут отличаться?
Спасибо,
Нил Уолтерс
Обновление 1:Некоторые исследования показывают, что поставщик, возможно, сможет добавить Атрибут SoapActor на их сайт.
Когда у нас есть https в URL-адресе, они выдают эту ошибку:
Заголовок должен соответствовать значению actor URI веб-службы.Значение URI актера может быть явно указано с помощью SoapActorAttribute в классе ASMX.В отсутствие атрибута предполагается, что URI субъекта равен URL HTTP-запроса входящего сообщения.Полученный заголовок содержал "https://somesite.net/orgid/SomeApp/SomeService.asmx" пока получатель ожидает ответа "http://somesite.net/orgid/SomeApp/SomeService.asmx".
Решение
Образец поставщика действительно был неправильным и не использовал SSL.Решение состояло в том, чтобы добавить параметр "VIA" в конструктор конечной точки:
valservice.Destination =
new Microsoft.Web.Services3.Addressing.EndpointReference(
new Uri(valservice.Url.Replace("https:", "http:")),
new Uri(valservice.Url));