2011-01-25 43 views
22

Tôi đang thử nghiệm dịch vụ REST trong WCF trên .net 4 - tức là không có tệp svc. Nó hoạt động tốt khi chạy với máy chủ VS dev nhưng khi tôi chuyển nó để chạy với IIS tôi nhận được 404 khi cố gắng duyệt trang trợ giúp hoặc nhấn bất kỳ phương thức dịch vụ nào.404 khi chạy .net 4 dịch vụ WCF trên IIS (không có tệp svc)

Tôi đã giảm trở lại dịch vụ xương trần để chỉ chạy ứng dụng trên IIS nhưng tôi không chắc có gì sai với nó.

Các global.asax chỉ đơn giản có

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

và dịch vụ riêng của mình cũng đơn giản như nó được:

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

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

và cấu hình tập tin của

<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> 

Va vào/help trang hoặc phương pháp cho tôi một 404.0.

Tôi đoán là tôi chỉ thiếu một số thiết lập trong IIS để khởi động nó trong cuộc sống mặc dù nó hơi lệch một chút nhưng nó hoạt động tốt trên máy chủ dev chứ không phải IIS.

+0

phiên bản IIS nào? –

+0

7.5.7600 chạy trên W7. –

+0

Bạn có nhận được một HTTP 404.4 không? Nếu vậy, hãy kiểm tra xem Ánh xạ xử lý của bạn có đúng không. – tomasmcguinness

Trả lời

27

Giải quyết sự cố sau khi đào một số diễn đàn khác.

Tôi ban đầu thêm vào phần sau đây để cấu hình web của tôi:

<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> 

Rõ ràng theo mặc định IIS không biết phải làm gì với các yêu cầu extensionless và truyền lại cho trình điều khiển file tĩnh.

Cho rằng MVC đang sử dụng cùng một kiến ​​trúc thông thường, tôi đã xác định rằng mẫu trang MVC cơ bản phải có cấu hình tương tự như trên vì các trang MVC của tôi hoạt động tốt khi chuyển sang IIS.

Nó chỉ ra rằng họ có một cấu hình hơi khác nhau và có các mục sau đây thay vì:

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

Cả configs dường như làm việc ok nhưng tôi giải quyết trên bằng cách sử dụng tùy chọn thứ 2 trong trường hợp này.

+2

* runAllManagedModulesForAllRequests = "true" * là cần thiết nếu bạn không áp dụng hotfix này http://support.microsoft.com/kb/980368. Đọc thêm về nó tại đây 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

Tôi giải quyết vấn đề này cài đặt "Cấu hình được đề xuất IIS 7" từ Trình cài đặt Nền tảng Web. –

+0

Tôi đã đi hạt cố gắng để làm cho nó hoạt động và cuối cùng câu trả lời của bạn đã làm nó. –

10

Tôi có runAllManagedModulesForAllRequests="true" trong web.config nhưng vẫn không thể vượt qua 404.0. Cũng đã thử cài đặt "Cấu hình đề xuất IIS 7" mà không có bất kỳ may mắn nào. Rerunning aspnet_regiis giải quyết được sự cố cho tôi.

  1. Trong hộp thoại Chạy, nhập cmd, sau đó bấm OK.

  2. Tại dấu nhắc lệnh, sử dụng lệnh cd để thay đổi thư mục của phiên bản Aspnet_regiis.exe bạn muốn sử dụng. Theo mặc định, aspnet_regiis.exe nằm trong thư mục sau: systemroot \ Microsoft.NET \ Framework \ VERSIONNUMBER

  3. Sau đó chạy lệnh sau: aspnet_regiis -iR

này sẽ đăng ký "svc -Integrated-4.0 "trong Ánh xạ xử lý.

+0

Điều này đã khắc phục được sự cố của tôi. Bạn cũng có thể chạy asp_regiis từ Visual Studio Command Prompt (dưới Công cụ Visual Studio trong trình đơn Start của bạn). –

0

Trên IIS 5.1 trên máy của tôi, trang .svc chỉ được phục vụ khi tôi thêm Trình xử lý HTTP ở cấp trang web cũng như cấp thư mục ảo. Điều này lý tưởng nên làm việc bằng cách thừa kế!

Extention: .svc

Executable:

c: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_isapi.dll

0

HTTP 404 mã có thể được trả lại cũng nếu bạn không có một số thành phần của .NET framework được cài đặt.

Có ví dụ Windows Communication Foundation HTTP Activation tính năng trong .NET Framework 3.5 và trong .NET Framework 4.6HTTP Activation, Message Queuing (MSMQ) Activation và một vài thứ khác.

Trong Windows 10, các tính năng này không được cài đặt theo mặc định, vì vậy, xin lưu ý hãy xem Windows Features.

Các vấn đề liên quan