2010-09-07 4 views
1

J'ai une méthode simple de service WCF:sérialisation/désérialisation des paramètres - WCF service d'appel ne fonctionne pas

[OperationContract] 
public SetupGameResult SetupGame(long player1Id, long player2Id, long myPlayerId) 
    { 
     if(player1Id == 0 || player2Id == 0 || myPlayerId == 0) 
     { 
      throw new ArgumentException(); 
     } 

     ... // other code 
    } 

J'appelle ce service en un seul endroit dans mon application silverlight. Ici:

 if(player1Id == 0 || player2Id == 0 || myPlayerId == 0) 
     { 
      throw new ArgumentException(); 
     } 

     // Setup Game 
     GameServiceClient gameService = new GameServiceClient(); 
     gameService.SetupGameCompleted += new EventHandler<SetupGameCompletedEventArgs>(gameService_SetupGameCompleted); 
     gameService.SetupGameAsync(player1Id, player2Id, myPlayerId); 

Normalement SetupGame est jamais appelé avec myPlayerId = 0. Mais pour être sûr que je vérifie avant d'appeler la méthode de service.

Le problème est que la méthode de service est appelé correctement une fois au deuxième appel, il jette l'exception d'argument parce que myPlayerId = 0.

C'est étrange parce que je vérifie avant d'appeler si elle est 0.

Qu'est-ce que problème pourrait-il être?

EDIT:
semble qu'il y ait vraiment un problème avec sérialisation/désérialisation.

Mais que raisons pourrait-il avoir?

EDIT 2:
je reçois l'avertissement suivant au cours buidling. Cela pourrait-il être le problème?

Warning 12 Client proxy generation for service 'Car_Motion.Web.Services.GameService' failed: Generating metadata files... 
Warning: Unable to load a service with configName 'Car_Motion.Web.Services.GameService'. To export a service provide both the assembly containing the service type and an executable with configuration for this service. 
Details:Either none of the assemblies passed were executables with configuration files or none of the configuration files contained services with the config name 'Car_Motion.Web.Services.GameService'. 
Warning: No metadata files were generated. No service contracts were exported. 
To export a service, use the /serviceName option. To export data contracts, specify the /dataContractOnly option. This can sometimes occur in certain security contexts, such as when the assembly is loaded over a UNC network file share. If this is the case, try copying the assembly into a trusted environment and running it. 

Merci à l'avance

+2

Sérialisation/désérialisation incorrecte entraînant une valeur par défaut. –

+0

On dirait que. Tous les paramètres sont 0. C'est vraiment étrange. – Ben

+0

Où mPlayerId est-il défini? Pourrait-il être mis à zéro entre votre chèque et votre appel de service? – Paddy

Répondre

1

Ben, je pense qu'il ya un problème avec votre service de référence et la classe proxy est pas correctement généré de sorte que les valeurs longues obtiennent peut-être la valeur par défaut de 0. s'il vous plaît vérifier les éléments suivants une fois

  1. Assurez-vous que votre service WCF compile
  2. essayez de supprimer et d'ajouter la référence de service une fois
  3. essayez d'exécuter manuellement svcutil.exe à partir de la ligne de commande VS. svcutil a un bug connu qui, quand vous l'exécutez sur un assembly de service avec un fichier de configuration, échoue comme vous l'avez vu. La solution de contournement consiste à commenter la section avant d'exécuter svcutil.
+0

Salut j'ai eu un problème avec les caches du navigateur. Le navigateur n'a pas téléchargé le dernier contrôle Silverlight. Depuis que j'aime votre réponse, je le fais le accepté ;-) – Ben

+0

Manquant de la réponse est l'élément dans le fichier de configuration qui a le bogue connu. La section en question est '' –

Questions connexes