2008-09-26 12 views
1

J'essaie d'appeler un service Web WCF (que j'ai développé) à partir d'une application Silverlight. Pour une raison quelconque, l'application Silverlight ne fait pas l'appel de savon http au service. Je le sais parce que je renifle tout le trafic http avec Fiddler (et ce n'est pas un appel localhost).Comment appeler un service Web WCF à partir de Silverlight?

Cette ma configuration du serveur correspondant à WCF:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="Service"> 
      <endpoint address="" binding="basicHttpBinding" contract="Service"/> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
</system.serviceModel> 

Et le fichier ServiceReferences.ClientConfig dans l'application silverlight (je suis en utilisant la version bêta 2):

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_Service" maxBufferSize="65536" 
       maxReceivedMessageSize="65536"> 
       <security mode="None" /> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://itlabws2003/Service.svc" binding="basicHttpBinding" 
      bindingConfiguration="BasicHttpBinding_Service" contract="Silverlight_organigram.DataService.Service" 
      name="BasicHttpBinding_Service" /> 
    </client> 
</system.serviceModel> 

C'est le méthode silverlight qui appelle le service, je colle toute la méthode pour la copleteness, le lambda est de rendre l'appel synchrone, je l'ai débogué et après la ligne client.GetPersonsAsync(), Fiddler ne montre aucun message voyageant vers le serveur.

public static List<Person> GetPersonsFromDatabase() 
    { 
     List<Person> persons = new List<Person>(); 

     ServiceClient client = new ServiceClient(); 

     ManualResetEvent eventGetPersons = new ManualResetEvent(false); 

     client.GetPersonsCompleted += new EventHandler<GetPersonsCompletedEventArgs>(delegate(object sender, GetPersonsCompletedEventArgs e) 
      { 
       foreach (DTOperson dtoPerson in e.Result) 
       { 
        persons.Add(loadFromDto(dtoPerson)); 
       } 
       eventGetPersons.Set(); 
      }); 

     client.GetPersonsAsync(); 
     eventGetPersons.WaitOne(); 

     return persons; 
    } 

Est-ce que quelqu'un a des suggestions comment je pourrais résoudre ce problème?

Répondre

0

Vous ne seriez pas en cours d'exécution du système de fichiers? Si vous utilisez l'application Silverlight sur votre ordinateur local et que vous n'utilisez pas le serveur Web VS ou IIS, vous ne pourrez pas effectuer d'appels HTTP pour des raisons de sécurité. De même, si vous chargez à partir d'un serveur Web, vous ne pouvez pas accéder aux ressources locales.

J'ai aussi trouvé que l'aide au développement Web de Nikhil http://www.nikhilk.net/ASPNETDevHelperTool.aspx peut être plus utile que Fiddler car vous verrez également du trafic local, bien que cela ne semble pas être votre problème dans ce cas.

+0

Le site Web est en cours d'exécution dans IIS 6.1 sur une autre machine dans le réseau local –

0

Je ne suis pas sûr à 100%, mais si vous utilisez Vista ou Server 2008, vous avez peut-être exécuter dans l'utilisateur problème de contrôle d'accès avec http.sys

Ainsi dans le serveur Vista et win2k8, le HttpListener écoutera Seulement si vous courez sous un compte Privelege élevé. En fait, d'après mon expérience, même si vous vous ajoutez au groupe d'administrateurs local, vous pouvez rencontrer ce problème.

Dans tous les cas, essayez de lancer Visual Studio sur Vista en cliquant avec le bouton droit de la souris et en exécutant runas Administrator. Voyez si cela le corrige. Si oui, vous êtes bien, mais ....

idéalement vous devez exécuter httpcfg

comme: httpcfg mis urlacl -u http://itlabws2003 -a D: (A ;; GX ;;; yoursid)

votre sid = l'identificateur de sécurité pour le compte que vous utilisez comme, vous pouvez le trouver ici: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList

si vous ne connaissez pas déjà, ou vous pourriez ajoutez-vous à BUILTIN \ Administators, trouvez le Sid et exécutez à nouveau le httpcfg via la ligne de commande, en spécifiant ce Sid.

Contrôle d'accès utilisateur, Vista et Http.sys provoquent tout cela ... si c'est effectivement le problème que vous rencontrez. Pas sûr, mais peut-être que cela vaut la peine d'essayer

+0

également, cela doit être fait sur les deux boîtes, si tel était effectivement le cas. – kd7

+0

merci pour la réponse, je cours Windows Server 2003 et XP pro, donc je suppose que ce n'est pas mon cas, acheter cependant je vais avoir cela à l'esprit. –

1

Si l'application Silverlight n'est pas hébergée dans le même domaine que celui qui expose le service Web que vous souhaitez appeler, les restrictions inter-domaines s'appliquent.Si vous souhaitez que l'application Silverlight soit hébergée dans un domaine autre que le service Web, vous pouvez consulter le this post pour vous aider à créer un fichier de définition de domaine croisé ou écrire un "proxy" intermédiaire .

Questions connexes