Сериализация / десериализация параметров - WCF Service Call не работает - PullRequest
1 голос
/ 08 сентября 2010

У меня есть простой метод обслуживания WCF:

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

        ... // other code
    }

Я называю эту Услугу только в одном месте в моем приложении Silverlight. Здесь:

        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);

Обычно SetupGame никогда не вызывается с myPlayerId = 0 . Но чтобы быть уверенным, я проверяю перед вызовом метода обслуживания.

Проблема в том, что метод службы вызывается правильно один раз, а при втором вызове он вызывает исключение аргумента, поскольку myPlayerId = 0.

Это странно, потому что я проверяю перед звонком, если это 0.

Какая это может быть проблема?

EDIT:
Кажется, что действительно существует проблема с сериализацией / десериализацией.

Но по каким причинам это могло быть?

РЕДАКТИРОВАТЬ 2:
Я получаю следующее предупреждение во время строительства. Может ли это быть проблемой?

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.

Заранее спасибо

1 Ответ

1 голос
/ 15 сентября 2010

Бен, я думаю, что есть какая-то проблема с вашей ссылкой на сервис, и прокси-класс не сгенерирован должным образом, поэтому длинные значения могут получить значение по умолчанию 0 пожалуйста, проверьте следующие пункты один раз

  1. Убедитесь, что ваш сервис WCF компилируется
  2. попробуйте удалить и добавить сервисную ссылку один раз
  3. попробуйте вручную запустить svcutil.exe из командной строки VS. У svcutil есть известная ошибка, что когда вы запускаете ее для сервисной сборки с файлом конфигурации, он потерпит неудачу, как вы видели. Обходной путь - закомментировать раздел перед запуском svcutil.
...