Почему VS "Add Service Reference" не может генерировать интерфейсы для сервисных контрактов, которые svcutil распознает просто отлично? - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть служба WCF, на которую я хочу, чтобы клиенты могли ссылаться с помощью функции «Добавить ссылку на службу» в Visual Studio. Они смогли распознать конечную точку метаданных, интерфейсы, методы и типы данных отображаются в диалоговом окне «Добавить ссылку на службу», и кажется, что она успешно генерирует прокси-сервер без помех - но при просмотре сгенерированного файла кода или просмотре классов в в объектном браузере отсутствует интерфейс службы, сгенерированный из ServiceContract - представлены только DataContracts. Когда я указываю svcutil на тот же URL-адрес конечной точки из командной строки, сгенерированный файл содержит содержит интерфейсы.

  • Сам сервис некоторое время использовался в производстве и, кажется, работает нормально
  • Используется настраиваемая привязка, но точно такая же конфигурация привязки (и другие параметры конфигурации) используются другой службой, которая, кажется, работает нормально с добавлением ссылки на службу
  • Одна вещь, которая отличается от , заключается в том, что эта служба использует пользовательское поведение (атрибут, полученный из IServiceBehavior). Интерфейс также находится в сборке, отличной от конкретного типа сервиса, хотя и контракты на данные.

Обновление: Кажется, что причиной проблемы, которую я как-то упустил, является то, что есть FaultContracts для некоторых методов этого интерфейса, и эти FaultContracts ссылаются на тип исключения, который [Serializable], а не [DataContract] (как я думаю, что все, что происходит от исключения, должно быть). Сам тип исключения представлен в сгенерированном коде, но его открытые свойства - нет (ни в svcutil, ни в ASR-генерируемом коде)

1 Ответ

0 голосов
/ 22 октября 2011

Казалось, что причиной проблемы, которую я как-то упустил, является то, что есть FaultContracts для некоторых методов этого интерфейса, и эти FaultContracts ссылаются на тип исключения, который является [Serializable], а не [DataContract](как я думаю, все, что происходит от исключения, должно быть).Сам тип исключения представлен в сгенерированном коде, но его открытые свойства - нет (ни в svcutil, ни в ASR-генерируемом коде)

...