Почему VS Add Service Reference не может генерировать интерфейсы для контрактов на обслуживание, которые svcutil прекрасно распознает?

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

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

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


person Max Strini    schedule 08.02.2011    source источник
comment
В качестве теста попробуйте удалить эти различия и посмотреть, сохраняется ли проблема.   -  person John Saunders    schedule 08.02.2011
comment
Я должен был попробовать это, прежде чем спрашивать, но ты заставил меня это сделать. Добавление ссылки на службу по-прежнему не создает код для интерфейсов служб.   -  person Max Strini    schedule 08.02.2011


Ответы (1)


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

person Max Strini    schedule 21.10.2011