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.
- Получаю ли я права на проверку подписки на Android в приложении?
- Продолжать работу службы
- Уведомление Push неправильно работает, когда приложение находится в фоновом режиме или не работает
- Вызов метода classа активности из classа обслуживания
- Как я могу сохранить работу своего Android-сервиса, когда экран выключен?
Это, конечно, проблема, потому что сервис раскрывается как 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?
- Android - Периодическая справочная служба - Советы
- Диалоговое окно оповещения из службы Android
- Как сохранить фон соединения Bluetooth?
- SpeechRecognizer вызывает ANR ... Мне нужна помощь с Android-речевым API
- Android - внедрение startForeground для службы?
- Реализация NotificationListenerService
- Android-сервис убит
- .aspx vs .ashx ОСНОВНАЯ разница
Ничего себе, я чувствую себя глупым.
Я должен был разместить мой сервис с 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 " %>