Host WCF no site MVC2
Temos um site MVC2 muito grande e complexo. Queremos adicionar uma API para algumas ferramentas internas e decidimos usar o WCF.
Idealmente, queremos que o próprio MVC hospede o serviço WCF. Os motivos incluem:
Embora haja várias camadas no aplicativo, algumas funcionalidades que gostaríamos na API exigem o próprio site (por exemplo, formatação de e-mails).Usamos o TFS para criar automaticamente (integração contínua) e implantar - Quanto menos precisarmos modificar o mecanismo de compilação e liberação, melhorUsamos o contêiner Unity e a Inversão de controle em todo o aplicativo. Fazer parte do site nos permitiria reutilizar classes de configuração e outros métodos auxiliares.Eu escrevi um ServiceBehavior personalizado que, por sua vez, possui um InstanceProvider personalizado - Isso permite instanciar e configurar um contêiner que é usado para atender a todas as solicitações de instâncias de classe do WCF.
Então, minha pergunta é; É possível hospedar um serviço WCF a partir do próprio MVC?
Eu só tinha experiência em sites Services / Standard Asp.Net antes e não percebi que o MVC2 poderia ser diferente até que eu tentei conectá-lo à configuração enada aconteceu. Depois de pesquisar no Google, parece não haver muitas referências a fazer isso - então pensei em perguntar aqui.
Mais detalhes:
Obrigado a vocês que responderam, mas ainda estou tendo problemas para fazer isso funcionar ... Minha configuração atual é assim:
<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>
Alguém pode me dizer se algo parece obviamente errado?
Eu esperava encontrar o ponto final emhttp://localhost/MyApplication/Job.svc
e metadados emhttp://localhost/MyApplication/Job.svc?mex
no entanto, ambos dão 404 - Até onde eu sei, não há sinal óbvio de que o WCF esteja em execução. Talvez eu precise fazer algo nas minhas rotas?
NB: Caso outras pessoas tenham esse problema, tive que adicionarroutes.IgnoreRoute("{MyJob}.svc/{*pathInfo}")
para a configuração da rota emGlobal.asax
para impedir que o MVC intercepte a chamada.