2011-03-21 6 views
1

Je fais une preuve de concept lorsque j'accède à un service Web public à partir de mon application client Silverlight 4. Lorsque je tente de faire l'appel t his sample public web service, je reçois l'erreur suivante:Accès au service Web SOAP à partir du client Silverlight 4

An error occurred while trying to make a request to URI 'http://www.w3schools.com/webservices/tempconvert.asmx'. 
This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, 
or a policy that is unsuitable for SOAP services. 
You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. 
This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. 

Puis-je seulement les services Web d'accès qui ont ces politiques en place ou suis-je tout simplement pas pour configurer mon service ASMX correctement dans mon projet? Le code pour appeler le service est la suivante:

// Create 
    var webServiceProxy = new TempConvert.TempConvertSoapClient(); 

    // Delegate 
    webServiceProxy.FahrenheitToCelsiusCompleted += (s, args) => 
    { 
     // Fail? 
     if (args.Error != null) 
     { 
      // Message 
      MessageBox.Show(string.Format("Something went wrong!\n\n{0}", args.Error.Message)); 
     } 
     else 
     { 
      // Message 
      MessageBox.Show(string.Format("50 f to c is {0}.", args.Result)); 
     } 
    }; 

    // Call 
    webServiceProxy.FahrenheitToCelsiusAsync("50"); 

Répondre

2

Très probablement si vous utilisez ce de votre machine, vous traversez les frontières de domaine et exiger que le site appelé à avoir les politiques en place pour appeler à partir d'un domaine différent.

Microsoft has plenty of information about it, recherchez également 'Silverlight Cross Domain' pour plus d'informations.

+0

Je pense que c'est le cas, mais il semble tout à fait restrictive que je ne peux pas configurer une politique dans mon client pour permettre les connexions à un autre domaine, même s'il n'a pas de politique d'accès en place. Cela exclurait l'accès à un certain nombre de services Web tiers directement à partir du client Silverlight. –

+0

Eh bien, vous pouvez essayer d'exécuter la Silverlight hors du navigateur (OOB). Dans Visual Studio 2010, faites un clic droit sur votre projet Silverlight-> Cliquez sur Propriétés-> Cliquez sur l'onglet Silverlight s'il n'y est pas déjà. Cliquez sur la case à cocher à côté de "Activer l'application en cours d'exécution à partir du navigateur." Modifiez n'importe lequel de ses paramètres via le bouton Paramètres OOB (largeur/hauteur, permettant une confiance élevée). Exécutez votre application. Cela devrait vous donner une permission élevée et vous permettre de dépasser les règles du domaine. – Landern

1

lorsque le serveur a reçu l'EEG url = /clientaccesspolicy.xml assurez-vous qu'il répond avec:

<access-policy> 
      <cross-domain-access> 
       <policy> 
        <allow-from http-request-headers="*"> 
         <domain uri="*"/> 
        </allow-from> 
        <grant-to> 
         <resource path="/" include-subpaths="true"/> 
        </grant-to> 
       </policy> 
      </cross-domain-access> 

Questions connexes