ServiceRoute + WebServiceHostFactory убивает генерацию WSDL? Как создать службу WCF без расширения с помощью? Wsdl

Я пытаюсь использовать службы WCF без расширения / .svc-less. Может ли кто-нибудь подтвердить или опровергнуть проблему, которую я испытываю?

Я использую маршрутизацию в коде и делаю это в Application_Start из global.asax.cs:

RouteTable.Routes.Add(new ServiceRoute("Data", new WebServiceHostFactory(), typeof(DataDips))); 

Я тестировал как IIS 6, так и IIS 7.5, и я могу использовать эту услугу просто отлично (т. Е. Моя конфигурация обработчика сопоставления подстановочных знаков без расширения правильно указана в ASP.NET). Однако генерация метаданных полностью запутана. Я могу поразить конечную точку my / mex с помощью тестового клиента WCF (и я предполагаю svcutil.exe), но генерация? Wsdl, которую вы обычно получаете с .svc, – это тост. Я не могу ударить его браузером (получить 400 плохих запросов), я не могу ударить его с помощью wsdl.exe и т. Д. Генерация метаданных настроена правильно в web.config.

Это, конечно, проблема, потому что сервис раскрывается как basicHttpBinding, чтобы клиент ASMX старого стиля мог добраться до него. Но, конечно, клиент не может генерировать прокси без описания WSDL.

Если я вместо этого использую serviceActivation-маршрутизацию в config, как это, вместо того, чтобы регистрировать маршрут в коде:

      

Тогда вуаля … это работает.

Но тогда у меня нет чистого неограниченного URL-адреса. Если я изменяю relativeAddress из Data.svc в Data, тогда я получаю исключение конфигурации, поскольку это не поддерживается конфигурацией. (Необходимо использовать расширение, зарегистрированное в WCF).

Я также попытался использовать этот код в сочетании с приведенной выше конфигурацией:

 RouteTable.Routes.MapPageRoute("","Data/{*data}","~/Data.svc/{*data}",false); 

Мое мышление состоит в том, что я могу просто указать URL без продолжения в настроенном URL-адресе .svc. Это не работает – /Data.svc продолжает работать, но / Data возвращает значение 404.

Я нашел работу, используя urlMappings в config, как это, в сочетании с serviceActivation выше:

    

Проблема с этим двоякая – 1. Кажется свернутой. 2. В сгенерированном WSDL конечные точки операции по-прежнему относятся к Data.svc /, а не к Data / – поэтому зависимость от Data.svc фактически существует / отвечает.

Это не совсем то, что я хочу, даже если это kinda / sorta решает проблему.

Есть ли правильный способ получения URL-адресов службы WCF без расширения для правильной генерации WSDL?

Ничего себе, я чувствую себя глупым.

Я должен был разместить мой сервис с ServiceHostFactory, а не с WebServiceHostFactory.

Как только я вернусь к коду из config … и поменялся на эту строку кода:

 RouteTable.Routes.Add(new ServiceRoute("Data", new ServiceHostFactory(), typeof(DataDips))); 

Я работал с неограниченным URL-адресом, обслуживающим WSDL и страницы справки.

Очень жаль, что я потратил столько времени на это. Это был случай, когда я использовал WebServiceHostFactory, но на заводской странице в MSDN нет отказа от сокращения функциональности. (Я бы сказал, что удаление WSDL имеет смысл, но удаление страниц справки не так просто, как они могли бы просто предоставить атрибут в config для переименования страницы «Справка», если есть операция REST с этим именем … sigh).

В документах WebServiceHost есть заметка: http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webservicehost.aspx

У меня та же проблема. Ваше решение работает над моим кодом. Я просто изменил Global.asax следующим образом:

 <%@ Application Language="C#" %> <%@ Import Namespace="System.Web.Routing" %> <%@ Import Namespace="System.ServiceModel.Activation" %> <%@ Import Namespace="System.ServiceModel.Web " %>  

к

 <%@ Application Language="C#" %> <%@ Import Namespace="System.Web.Routing" %> <%@ Import Namespace="System.ServiceModel.Activation" %> <%@ Import Namespace="System.ServiceModel.Web " %>  
  • clear Недавние приложения уничтожают память приложений, и мой ресивер перестает работать
  • onTaskRemoved () не получает вызов в устройствах HUAWEI и XIOMI
  • Как определить, когда пользователь запускает другое приложение? (Android)
  • Попытка запуска службы при загрузке на Android
  • Android: сохранить сервис, когда приложение убито
  • Служба Android останавливается, когда приложение закрыто
  • Широковещательный приемник в службе
  • Как объявляется Intent Service в манифесте Android?
  • Служба Android должна запускаться всегда (никогда не останавливать или останавливать)
  • Сервис против IntentService
  • Как вы реализуете FileObserver из службы Android
  • Давайте будем гением компьютера.