2010-02-05 10 views
2

J'ai une application Silverlight qui fonctionne parfaitement et qui peut accéder aux services WCF hébergés dans l'application Silverlight elle-même. Le port utilisé est 1794.L'application Silverlight ne peut pas accéder aux services WCF sur d'autres machines

Lorsque je déploie sur d'autres serveurs (dev ou test ou staging), l'application ne peut pas accéder aux services WCF.

C'est un extrait de mon ServiceReference.ClientConfig ressemble

<endpoint address="http://localhost:1794/MyWebService.svc" 
       binding="customBinding" bindingConfiguration="CustomBinding_MyWebService" 
       contract="ConfigMgmtServiceReference.MyWebService" 
       name="CustomBinding_MyWebService" /> 

Mon dossier racine contient aussi le fichier clientaccesspolicy.xml.

Comment puis-je résoudre ce problème?

Merci d'avance.

+0

Ainsi, lorsque vous appelez le composant WCF à partir d'une autre machine, utilisez-vous toujours l'URL localhost? Ce serait un problème là. Vous devez être en mesure d'adresser la boîte qui exécute le service. Ou est-ce que je manque quelque chose? –

+0

Terry, Avant de générer le projet et de publier sur d'autres serveurs, je modifie l'adresse dans le point de terminaison. Je le change en localhost: 1794 en servername/virtualfolder. – SVI

Répondre

1

Je soupçonne que le localhost:1794 causerait le problème - quand l'application silverlight s'exécute sur un ordinateur client, l'hôte local ne le récupèrera pas au serveur.

La technique que j'utilise pour éliminer les problèmes de ce type consiste à définir par programme les points d'extrémité au moment de l'exécution. Les deux informations dont j'ai besoin sont l'emplacement dans mon projet Web du service (qui est connu à l'avance), et l'adresse (domaine) à partir de laquelle l'application Silverlight a été servie (que je peux trouver).

private void initEndpoint(ServiceEndpoint endPoint, string serviceName) 
    { 
     Uri hostUri = Application.Current.Host.Source; 
     string wcfBaseUri = string.Format("{0}://{1}:{2}/WebServices/", hostUri.Scheme, hostUri.Host, hostUri.Port); 

     endPoint.Address = new EndpointAddress(new Uri(wcfBaseUri + serviceName)); 
    } 

Dans ce morceau de code, le dossier est /WebServices où mes services Web se trouvent dans mon application web. J'appelle alors la fonction comme ceci:

 LoggingServiceClient loggingService = new LoggingServiceClient(); 
     initEndpoint(loggingService.Endpoint, "LoggingService.svc"); 

ma configuration actuelle est un peu plus complexe que cela, parce que je veux aussi pouvoir passer outre cela et configurer manuellement les points d'extrémité, mais vous obtenez le point. En faisant cela, j'ai été capable de déployer toutes sortes de configurations, avec des serveurs Web fonctionnant sur des ports impairs, et le bit silverlight-> webservice fonctionne à chaque fois.