WCF - Использование ServiceRoutes вместо файлов svc - Мое приложение заявляет, что мне нужна AspNetCompatability только при первой попытке подключения? - PullRequest
0 голосов
/ 03 июня 2011
public class Global : HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    private static void RegisterRoutes(ICollection<RouteBase> routes)
    {
        routes.Add(new ServiceRoute("Calculator", new WebServiceHostFactory(), typeof(CalculatorService)));
    }
}

<system.serviceModel>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true">
    <serviceActivations>
      <add factory="System.ServiceModel.Activation.ServiceHostFactory"
           relativeAddress="Calculator.svc"
           service="MyServer.CalculatorService"/>
    </serviceActivations>
  </serviceHostingEnvironment>
</system.serviceModel>

Когда я делаю это и перехожу на http://localhost/MyApp/Calculator.svc, я получаю сообщение об ошибке, в котором говорится, что мне нужна AspNetCompatability.Поэтому я добавил [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)], и это работает, единственное, что меня беспокоит, - я хочу, чтобы мой сервис использовал альтернативные средства транспорта (не только http), если я хочу использовать альтернативные привязки не-http.

Странно то, что если я не установил атрибут «Разрешено» или «Требуется», то при перестроении страницы я получаю эту ошибку.После того, как я получил эту ошибку, я нажал «Обновить», и все в порядке.И это не просто, если я запрашиваю svc через веб-браузер, но если у меня есть приложение, оно аварийно завершает работу при первом подключении (если сервер был перезапущен) и после этого работает.Что дает?

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

Я думаю, что ваша проблема в неправильной конфигурации.Вы добавляете маршрут и одновременно регистрируете сервис с активацией на основе конфигурации.Используйте либо одну, либо вторую.Также вы можете использовать маршруты и только протоколы Http или не-http протоколы, но без маршрутов.

1 голос
/ 03 июня 2011

К сожалению, да, вы должны включить совместимость ASP.NET для использования ServiceRoutes. Это связано с тем, что среда выполнения ASP.NET теперь отвечает за маршрутизацию трафика, а не только модули IIS.

...