2009-01-20 7 views
1

Je travaille avec un autre codeur sur un site Web qui accède à SQL Server (2008 Express) via certains services Web qu'il a créés (impliquant principalement LINQ to SQL), et l'interface utilisateur est dans Silverlight. J'ai travaillé sur une autre partie du système, mais je viens d'obtenir son dernier code, et j'essaie de l'exécuter sur ma machine, mais je reçois une erreur.CommunicationException sur le rappel asynchrone du service Web appelé depuis l'application Silverlight

Il est un CommunicationException sur une ligne dans le fichier reference.cs, la méthode EndXXX du service Web:

// This is for a Ping method we created just to trouble shoot- it behaves the same. 
public string EndPing(System.IAsyncResult result) { 

    object[] _args = new object[0]; 

    // Next line throws Communication Exception 
    string _result = ((string)(base.EndInvoke("Ping", _args, result))); 
    return _result; 
} 

Le message d'erreur est:

« Une erreur est survenue en essayant de faire une demande d'accès à l'URI 'http://localhost:1233/SummitService.svc'. Cela peut être dû à la tentative d'accès à un service de manière interdomaine sans l'application d'une stratégie interdomaine appropriée ou d'une stratégie inappropriée pour les services SOAP. propriétaire du service pour publier un fichier de régulation interdomaines et pour s'assurer qu'il autorise l'envoi d'en-têtes HTTP liés à SOAP. S'il vous plaît voir l'exception interne pour plus de détails. "

La pile entière est sur ma machine locale, donc je ne devrais pas avoir besoin de faire des appels inter-domaines. Nous avons examiné tout le code de configuration que nous pourrions trouver (web .config, ServiceReferences.ClientConfig), pour changer toutes les références à sa machine à la mienne.Nous sommes tous deux assez nouveau à toutes ces technologies, nous avons donc couru à la fin de nos connaissances. cloches pour tout le monde?


MISE à JOUR

J'ai donc effectué quelques opérations de dépannage, et j'ai découvert que si j'entre l'adresse localhost de la page aspx qui commence tout ça, ça se charge bien, et je vois les données du webservice sur la page. Ce n'est que lorsque je débogue que j'ai cette erreur.

J'ai également remarqué que lorsque j'essaie de déboguer la page, il charge l'emplacement du fichier - D: \ projects \ etc - dans le navigateur et ne passe pas par localhost. Et il charge actuellement la page de test .html dans le projet, même si j'ai défini la page .aspx comme page de démarrage. Il semble donc que ce soit quelque chose à voir avec les paramètres du projet ou peut-être les paramètres VS2008, et pas un problème de configuration comme je l'ai d'abord supposé. Est-ce que quelqu'un a d'autres suggestions?

Répondre

1

Ok, donc je me sens un peu bête.

Après m'être battu la tête contre cette chose pendant plusieurs jours, j'ai découvert que j'avais le projet Silverlight comme projet de démarrage. J'avais besoin que ce soit le projet web qui avait les paramètres d'authentification appropriés pour se connecter à la base de données - sans parler de la page hôte .aspx que j'avais définie comme page de démarrage, et je me demandais pourquoi elle n'était pas utilisée.

Dès que je définis le bon projet. Tout était beau.

0

Le problème peut provenir de la façon dont LINQ sérialise les résultats de la requête. S'il détecte les relations entre les tables, il les envoie avec les données du service, mais comme Silverlight est en sandbox, il ne peut pas accepter de données 'branchées'.

Dans le concepteur LINQ, essayez de passer du mode de sérialisation à Unidirectionnel et de voir si cela fonctionne.

+0

Merci pour la suggestion. Je l'ai essayé, mais pas de chance. Pour être honnête, même si j'ai donné toutes les technologies utilisées pour l'exhaustivité, le fait que le service web "Ping" (qui renvoie juste une chaîne littérale) a le même problème me fait penser que c'est quelque chose de simple sur les services. J'aimerais savoir quoi! – TwainJ

0

Je pense que dans votre projet de test web où vous avez ajouté le projet silverlight, vous avez défini pour créer une page de test à chaque fois que le projet construit. Décochez cette option en premier.

Questions connexes