Вопрос

У меня есть поставщик, который говорит мне, что в заголовке 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));

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top