Плоский WSDL для WCF 4 Сервис - PullRequest
9 голосов
/ 27 апреля 2011

Используя WCF 3.5 и FlatWsdl EndpointBehavior от Кристиана Вейера , я смог получить один плоский файл WSDL для своих служб WCF без каких-либо директив <import>.

Теперь с WCF4, по какой-то причине это больше не работает.

Я перепробовал все, что описано во многих записях блога, в том числе с использованием расширения поведения WcfExtras .

Все они относятся к Chr.Решение Weyers или рекомендация WcfExtras.Я также удостоверился, что указал одно и то же пространство имен для привязки, ServiceContract и ServiceBehavior.

В хосте настраиваемой службы, когда планируется ввод FlatWsdlExtension, коллекция Description.Endpoints всегда пуста.Я попытался настроить конечную точку службы с адресом или без него, но безуспешно.

Что мне нужно сделать, чтобы получить единый плоский WSDL для моей службы WCF 4?

Спасибо за любые ответы.

Ответы [ 2 ]

4 голосов
/ 09 ноября 2011

У меня была эта точная проблема.После нескольких попыток сегодня я, наконец, заставил его работать, выполнив следующие действия:

Прочтите этот блог полностью.

Убедитесь, что вы точно указалитот же атрибут пространства имен в: ServiceContract, ServiceBehavior и bindingNamespace (.config-> services / service / endpoint section).

Помните об этой проблеме , с которой я столкнулся в один момент.

Загрузите этот zip-файл и включите FlatWsdl / Extensions: FlatWsdl.cs, FlatWsdlServiceHost.cs и FlatWsdlServiceHostFactory.cs где-нибудь в вашем проекте.

Убедитесь, что вы указалиполное имя класса для вашей версии FlatWsdlServiceHostFactory.cs (минус .cs, конечно) в атрибуте ServiceHost Factory вашего файла .svc.

Сегодня я пробовал WcfExtras среди прочего - может бытьболее или менее к этому, но эти шаги наконец заставили меня идти.Удачи!

[редактировать]

2 голосов
/ 19 сентября 2011

Поздний ответ, надеюсь, он кому-нибудь поможет.

Была та же проблема, решена путем ручного добавления поведения в точку обслуживания:

   FlatWsdlServiceHost serviceHost = new FlatWsdlServiceHost(typeof(MyService));

   ServiceEndpoint endp = serviceHost.AddServiceEndpoint(typeof(IMyService), new BasicHttpBinding(), "MyService");
   endp.Behaviors.Add(new FlatWsdl());
...