2011-01-25 14 views
22

WCF'de .net 4'te bir REST hizmetini test ediyorum - yani svc dosyası yok. VS dev sunucusuna karşı çalışırken harika çalışıyor, ancak IIS'ye karşı çalıştırmaya geçtiğimde, yardım sayfasına göz atmaya çalışırken veya hizmet yöntemlerinden herhangi birine basmaya çalışırken 404 aldım.404 çalıştığında .net 4 IIS'de WCF hizmeti (svc dosyası yok)

Sadece IIS üzerinde çalışmasını sağlamak için çıplak kemikleri hizmetine geri döndüm ancak bununla ilgili sorun olduğundan emin değilim.

global.asax basitçe

protected void Application_Start(object sender, EventArgs e) 
    { 
     RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(DataPortalService))); 
    } 

vardır ve alır gibi Hizmetin kendisi kadar basittir:/yardım vurmak

<configuration> 
    <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
    <standardEndpoints> 
     <webHttpEndpoint> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" /> 
     </webHttpEndpoint> 
    </standardEndpoints> 
    </system.serviceModel> 

</configuration> 

ait

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class DataPortalService : IDataPortalService 
{ 
    [WebGet(UriTemplate = "Test/TestMethod")] 
    public string TestMethod() 
    { 
     return "Hi!"; 
    } 
} 

[ServiceContract] 
public interface IDataPortalService 
{ 
    [OperationContract] 
    string TestMethod(); 
} 

ve yapılandırma dosyası sayfa veya yöntem bana bir 404.0 verir.

Sadece IIS'de değil, sunucuda gayet iyi çalıştığı halde biraz daft olmasına rağmen, IIS'de hayata başlaması için bazı ayarları kaçırdığımı farz ediyorum.

+0

Hangi IIS sürümü? W7 üzerinde çalışan –

+0

7.5.7600. –

+0

HTTP 404.4 alıyor musunuz? Öyleyse, İşleyici Eşleştirmelerinizin doğru olup olmadığını kontrol edin. – tomasmcguinness

cevap

27

Diğer forumlarda bir kazı yaptıktan sonra çözdünüz.

<system.webServer> 
    <handlers> 
     <remove name="svc-Integrated-4.0" /> 
     <add name="svc-Integrated-4.0" path="*" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 

Açıkça varsayılan olarak IIS extensionless istekleriyle yapmak ve statik dosya işleyicisi onları geçti ne bilmiyor:

Başlangıçta benim web config aşağıdaki eklendi.

MVC'nin aynı rutin mimariyi kullandığı düşünüldüğünde, MVC sitelerinin IIS'ye taşındığında iyi çalıştığından temel MVC site şablonunun yukarıdaki gibi bir yapılandırma olması gerektiğini düşündüm.

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 

Hem yapılandırmaları Tamam çalışmıyor gibi görünüyor ama bu durumda 2 seçeneğini kullanarak yerleşmiş:

Onlar biraz daha farklı bir yapılandırma var ve bunun yerine aşağıdaki girdiyi sahip çıkıyor.

+2

* runAllManagedModulesForAllRequests = "true" *, bu düzeltmeyi http://support.microsoft.com/kb/980368 yüklediyseniz gereklidir. Daha fazlası için http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of-extensionless-urls-without-impacting-static -requests.aspx –

+0

Bu sorunu, Web Platform Yükleyicisi'nden "IIS 7 Önerilen Yapılandırma" yı yükleyerek çözüyorum. –

+0

Çalıştırmaya çalışıyorum ve cevabın sonunda yaptım. –

10

Web.config sayfamda runAllManagedModulesForAllRequests="true" vardı, ancak yine de 404.0'ı geçemedim. Ayrıca herhangi bir şans olmadan "IIS 7 Önerilen Yapılandırma" yüklemeyi denedim. aspnet_regiis Rerunning sorunu bana çözdü. Çalıştır iletişim kutusunda

  1. , tip cmd ve sonra Tamam'a tıklayın.

  2. Komut isteminde kullanmak istediğiniz Aspnet_regiis.exe sürümünün dizinini değiştirmek için cd komutunu kullanın. Varsayılan olarak, Aspnet_regiis.exe'yi aşağıdaki dizinde bulunur: systemroot \ Microsoft.NET Framework \ sürümNumarası

  3. Daha sonra aşağıdaki komutu çalıştırın \: -Kızılötesi

Bu kaydedecektir

"SVC aspnet_regiis İşleyici Eşlemlerinde -Integrated-4.0 ".Benim makinede IIS 5.1 üzerinde

+0

Bu, sorunumu giderdi. Ayrıca asp_regiis'i Visual Studio Komut İstemi'nden (Başlat menüsünüzde Visual Studio Tools altında) çalıştırabilirsiniz. –

0

.svc sayfa lazım Web Sitesi düzeyinde hem de sanal klasör düzeyinde HTTP işleyicisi eklenen yalnızca tebliğ edilmiştir. Bu ideal olarak miras yoluyla çalışmalıdır!

Genişletme: .svc

yürütülebilir:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \

0

HTTP Aspnet_isapi.dll 404 kod iade edilebilir Ayrıca, .NET framework'ün bazı bileşenleri yüklü değilse.

.NET Framework 3.5 yılında örneği Windows Communication Foundation HTTP Activation özelliği var ve .NET Framework 4.6 yılında HTTP Activation, Message Queuing (MSMQ) Activation ve birkaç tane daha var. Bu özellikleri varsayılan olarak yüklü olmayan, Windows 10 yılında

yüzden Windows Features bakmak için lütfen unutmayın.

İlgili konular