2010-01-14 9 views
0

J'ai un fournisseur qui me dit que l'en-tête SOAP ne devrait pas contenir de https, mais que nous pouvons toujours communiquer via SSL. Notre préoccupation est que nous voulons communiquer via SSL et que leur exemple de code ne le fasse pas.WSE3 Destination vs URL

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écomposant 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-ce il possible d'avoir une URL différente dans la destination que l'URL? Si oui, comment?

En outre, si je réinitialise l'URL après la mise à jour de la destination, la destination est également modifiée. On dirait que les deux sont en quelque sorte liés les uns aux autres et ne peuvent pas être différents?

Merci,

Neal Walters

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

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

The header must match the actor URI value of the web service. The actor URI value can be explicitly specified using SoapActorAttribute on the ASMX class. In the absence of the attribute, the actor URI is assumed to be equal to the HTTP Request Url of the incoming message. The header received contained " https://somesite.net/orgid/SomeApp/SomeService.asmx " while the receiver is expecting " http://somesite.net/orgid/SomeApp/SomeService.asmx ".

+0

Y at-il une raison que vous utilisez WSE? Saviez-vous que c'est obsolète? –

+0

Est-ce que mon fournisseur veut suivre le temps est la question? Selon Microsoft, WCF est "compatible avec le câble" avec WSE. Pas lorsque vous les appelez et que vous les insérez dans les détails, uniquement si le fournisseur active "SSL requis" dans leur IIS. Trucs méchants! – NealWalters

Répondre

Questions connexes