Question

J'ai un vendeur me disant que l'en-tête SOAP ne devrait pas avoir https, mais que nous pouvons encore communiquer via SSL. Notre souci est que nous voulons communiquer via SSL et que leur exemple de code est à l'origine, il ne se produise pas.

Dans leur exemple de programme, ils fournissent ce code:

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

De décomposer en petites étapes, et en ajoutant quelques debug, il semble que lorsque vous changez la destination, que l'URL change automatiquement.

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

Sortie:

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

Question: Est-il possible d'avoir une URL différente dans la destination que l'URL? Si c'est le cas, comment?

En outre, si je réinitialiser l'URL après mise à jour de la destination, la destination obtient également changé. On dirait que les deux sont en quelque sorte liés les uns aux autres et ne peut pas être différent?

Merci,

Neal Walters

Mise à jour 1: Certaines recherches indiquent que le vendeur pourrait être en mesure d'ajouter le attribut SoapActor sur leur site.

Quand nous avons https dans l'URL, ils donnent cette erreur:

  

L'en-tête doit correspondre à la   URI acteur valeur du service Web.   La valeur URI de l'acteur peut être explicitement   spécifié à l'aide de SoapActorAttribute   la classe ASMX. En l'absence de   attribuer, l'URI de l'acteur est supposé   égal à la requête HTTP Url de   le message entrant. l'en-tête   reçu contenu   " https://somesite.net/orgid/SomeApp/SomeService.asmx "   tandis que le récepteur attend   " http://somesite.net/orgid/SomeApp/SomeService.asmx".

Était-ce utile?

La solution

L'échantillon du vendeur était bien mal et ne pas utiliser SSL. La solution a été d'ajouter le paramètre « VIA » au constructeur du point final:

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

http: // msdn .microsoft.com / fr-fr / bibliothèque / microsoft.web.services3.addressing.endpointreference.via.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top