У меня есть служба WCF, на которую я хотел бы, чтобы клиенты могли ссылаться с помощью функции Visual Studio «Добавить ссылку на службу». Они смогли распознать конечную точку метаданных, интерфейсы, методы и типы данных отображаются в диалоговом окне «Добавить ссылку на службу», и кажется, что прокси-сервер успешно сгенерирован без проблем, но при просмотре сгенерированного файла кода или просмотре классов в обозреватель объектов, интерфейс службы не создается из ServiceContract - представлены только DataContracts. Когда я указываю svcutil на тот же URL-адрес конечной точки из командной строки, сгенерированный файл действительно содержит интерфейсы.
- Сам сервис некоторое время использовался в продакшене и, похоже, работает нормально.
- Он использует настраиваемую привязку, но точно такая же конфигурация привязки (и другие параметры конфигурации) используются другой службой, которая, похоже, отлично работает с Добавить ссылку на службу.
- Одно отличие от заключается в том, что эта служба использует настраиваемое поведение (атрибут, производный от IServiceBehavior). Интерфейс также находится в сборке, отличной от конкретного типа службы, хотя контракты данных тоже.
Обновление. Похоже, что причиной проблемы, которую я как-то упустил из виду, является то, что для некоторых методов в этом интерфейсе есть FaultContracts, и эти FaultContracts ссылаются на тип исключения, который является [Serializable ], а не [DataContract] (как я думаю, все, что происходит от Exception, должно быть). Сам тип исключения представлен в сгенерированном коде, но его общедоступные свойства - нет (либо в svcutil, либо в коде, созданном ASR).