Спасибо - я добавляю этот файл в корень рядом с
очень большой и сложный веб-сайт MVC2. Мы хотим добавить API для некоторых внутренних инструментов и решили использовать WCF.
В идеале мы хотим, чтобы MVC сам размещал службу WCF. Причины включают в себя:
Несмотря на то, что приложение имеет несколько уровней, для некоторых функций, которые нам нужны в API, необходим сам сайт (например, форматирование электронных писем).Мы используем TFS для автоматической сборки (непрерывная интеграция) и развертывания - чем меньше нам нужно изменить механизм сборки и выпуска, тем лучшеМы используем контейнер Unity и Inversion of Control во всем приложении. Участие в веб-сайте позволит нам повторно использовать классы конфигурации и другие вспомогательные методы.Я написал собственный ServiceBehavior, который, в свою очередь, имеет собственный InstanceProvider - это позволяет мне создавать экземпляры и настраивать контейнер, который затем используется для обслуживания всех запросов на экземпляры классов из WCF.
Итак, мой вопрос: Можно ли разместить службу WCF внутри самого MVC?
У меня был только опыт работы с сайтами Services / Standard Asp.Net и я не знал, что MVC2 может отличаться, пока я не попытался подключить его к конфигурации иничего не произошло, После некоторого поиска в Google, кажется, не так много упоминаний о том, как это сделать, - подумал я здесь.
Подробнее:
Спасибо тем из вас, кто ответил, но у меня все еще есть проблемы с этим ... Мой текущий конфиг выглядит так:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true">
<serviceActivations>
<add relativeAddress="Job.svc"
service="MyApplication.WebJobManager"
factory="System.ServiceModel.Activation.WebServiceHostFactory" />
</serviceActivations>
</serviceHostingEnvironment>
<extensions>
<behaviorExtensions>
<add name="WCFDIBehavior" type="MyApplication.Jobs.WCFDIBehaviorExtension, MyApplication.Jobs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<standardEndpoints>
<mexEndpoint>
<standardEndpoint name="WebJobManagerMex" />
</mexEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior name="JobServiceBehavior">
<serviceMetadata />
<WCFDIBehavior />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="" name="MyApplication.Jobs.WebJobManager">
<endpoint binding="basicHttpBinding"
bindingConfiguration="" name="HTTPEndpoint" contract="MyApplication.JobService.Interfaces.IWebJobManager" />
</service>
</services>
</system.serviceModel>
Может кто-нибудь сказать мне, если что-то выглядит явно не так?
Я ожидал найти конечную точку вhttp://localhost/MyApplication/Job.svc
и метаданные вhttp://localhost/MyApplication/Job.svc?mex
однако оба дают 404. Насколько я могу судить, нет никаких явных признаков того, что WCF работает вообще. Возможно, мне нужно что-то сделать с моими маршрутами?
NB: В случае, если у других есть эта проблема, я должен был добавитьroutes.IgnoreRoute("{MyJob}.svc/{*pathInfo}")
в настройку Route вGlobal.asax
для предотвращения перехвата вызова MVC.