2010-10-28 12 views
14

Bir WCF hizmetim var (bir MVC uygulamasında bir Alanın services dizininin içinde oturan TestService.svc diyelim. Bu alan ana uygulamaya birleştirilmiştir. .. alan yolları kurulum olmuşturYönlendirilmiş bir yoldaki MVC uygulamasında bir Bölgeye ait WCF hizmetlerini açığa çıkarın

content denilen ve alan çalışıyor I birini yapabilirsiniz Home denetleyicisinde Index eylemi erişmek için:.

http://my-host/areas/content/index/home

veya

Ben http://my-host/content/services/TestService.svc üzerinden doğrudan erişemez, areas dizin içermelidir

http://my-host/areas/content/services/TestService.svc

URL:

http://my-host/content/index/home

SVC dosyaancak sadece üzerinden erişilebilir. Denemek gerekirse, 404 hatası verilir.

Uygulamayı, SVC isteğini denetleyicilerle aynı yol tablosu üzerinden yönlendirecek şekilde ayarlamanın bir yolu var mı? Hizmetler için areas kullanmak zorunda kalmak istemiyorum.

cevap

24

Eğer yerine bir .svc dosyası yoluyla daha ServiceRoute yoluyla WCF hizmeti kullanılabilir hale düşünebilirsiniz .NET 4.0 kullanmak için özgürlük varsa.

Bu, TestService.svc.cs kod arkaplanına sahip TestService.svc dosyasından kaçınmanızı sağlayacaktır. senin Global.asax.cs ise şu olacaktır:

public static void RegisterRoutes(RouteCollection routes, IUnityContainer container) 
{ 
    ... other MVC route mapping .... 
    routes.Add(new ServiceRoute("TestService", new ServiceHostFactory(), typeof(LoaEvents))); 
} 

Servis sonra http://my-host/TestService üzerinden erişilebilir olmalıdır.

"TestService" bağımsız değişkenini "/content/services/TestService" veya gereksinimleriniz için daha iyi çalışan bir şey değiştirebilirsiniz.

+0

Bir yan not olarak, rota yollarını eğik çizgi ile başlatamazsınız, bu nedenle içerik/hizmetler/TestService olur. – Kezzer

+0

http://geekswithblogs.net/michelotti/archive/2010/09/22/wcf-rest-services-inside-mvc-projects.aspx –

+0

'daki gibi rota kısıtlamalarını uyguladıktan sonra bu çözümü kullanabildim benim hayatım – TheQult

İlgili konular