У нас очень большой и сложный веб-сайт 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перехват вызова.