2011-11-28 9 views
8

Ứng dụng được viết bằng ASP .NET 4.0 được lưu trữ trong IIS 7.5 trên máy chạy Windows Server 2008 R2. Hồ bơi ứng dụng đang sử dụng Chế độ đường ống được quản lý tích hợp.ASP.NET 4.0 Web App ném "Chức năng không đúng. (Ngoại lệ từ HRESULT: 0x80070001)"

Ngoại lệ bên dưới được ném khi trên một số trang khác nhau không có điểm chung rõ ràng. Tôi không thể tự mình tái tạo ngoại lệ, nhưng nó đã xảy ra 10 lần tuần trước trong môi trường sản xuất.

Từ dấu vết ngăn xếp Tôi thấy rằng ngoại lệ được ném bởi phương thức "HttpRequest.GetEntireRawContent" vì vậy tôi đã tự hỏi nếu có gì đó sai với yêu cầu, chẳng hạn như nó quá dài hoặc chứa ký tự không hợp lệ.

Chỉ cần rõ ràng, ngoại lệ này là không phải được ném từ mã mà tôi đã viết, nó nằm trong không gian tên System.Web. Vì vậy, tôi không thể thêm một thử ... bắt xung quanh nó.

Tôi rất vui vì bất kỳ ý tưởng nào về nguyên nhân của các bước ngoại lệ hoặc khắc phục sự cố để tìm hiểu thêm thông tin.

Exception: System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.Web.HttpException (0x80004005): An error occurred while communicating with the remote host. The error code is 0x80070001. ---> System.Runtime.InteropServices.COMException (0x80070001): Incorrect function. (Exception from HRESULT: 0x80070001) 
    at System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32 result, Boolean throwOnDisconnect) 
    at System.Web.Hosting.IIS7WorkerRequest.ReadEntityCoreSync(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Web.HttpRequest.GetEntireRawContent() 
    at System.Web.HttpRequest.FillInFormCollection() 
    at System.Web.HttpRequest.get_Form() 
    at System.Web.HttpRequest.get_HasForm() 
    at System.Web.UI.Page.GetCollectionBasedOnMethod(Boolean dontReturnNull) 
    at System.Web.UI.Page.DeterminePostBackMode() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.HandleError(Exception e) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest() 
    at System.Web.UI.Page.ProcessRequest(HttpContext context) 
    at ASP.report_openinghours_aspx.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

EDIT:

Như đã chỉ ra bởi lukiffer có một câu hỏi tương tự ở đây: stackoverflow.com/questions/7825127/ Việc sửa chữa được đề xuất là để tắt TCP giảm tải, theo cách tôi hiểu nó được rằng TCP giảm tải che chắn cho máy chủ web từ rất nhiều sự phức tạp của TCP. Do đó tắt nó sẽ tiêu thụ rất nhiều chu kỳ CPU để làm chậm các máy chủ web, mà rõ ràng là không mong muốn.

Tôi cũng không hiểu lý do tại sao TCP offloading sẽ gây ra IIS để ném một ngoại lệ.

+1

Xem: http: // stackoverflow.com/questions/7825127/system-runtime-interopservices-comexception-incorrect-function-exception-from – lukiffer

+0

Bạn có thể đăng mã bên trong 'report_openinghours.aspx.cs' đang gọi dịch vụ/nguồn dữ liệu từ xa, bao gồm mọi lệnh gọi COM và đối tượng – Kane

+0

Mã bên trong 'report_openinghours.aspx.cs' không gọi một dịch vụ/nguồn dữ liệu từ xa hoặc bất kỳ cuộc gọi hoặc đối tượng COM nào. Có vẻ như mã sử dụng đối tượng COM nằm trong lớp IIS7WorkerRequest. – user1069816

Trả lời

0

Bạn không thể vẫn gặp sự cố này, nhưng nếu những người khác gặp sự cố này thì đây là liên kết có thể hữu ích.

TechNet forum

TCP tác Offloading tùy chọn của trình điều khiển NIC nên được đặt ở physicla NIC cấp (các nic của host mà các ảo mạng External đang sử dụng). Hãy chắc chắn rằng bạn không vô hiệu hóa ống khói và nghĩ rằng bạn đang vô hiệu hóa Thao tác tải xuống. Trong cài đặt của trình điều khiển là các tùy chọn có chức năng 'offloading' trong tên - đây là các tùy chọn để tắt.

  • Tắt quản lý nguồn trên NIC phiên bản (một số trình điều khiển bật tính năng này).

  • Thử Intel NIC vật lý (đơn giản nhất của tất cả với Hyper-V)

  • Kiểm tra xem các IC trong máy ảo là tương đương với máy chủ.

  • Kiểm tra các sự cố khác với máy ảo chẳng hạn như tăng đột biến tài nguyên với CPU hoặc đĩa IO hoặc bất kỳ thứ gì khác có thể gây treo máy.

+0

Hãy nói lý do bạn tin rằng đây là giải pháp cho vấn đề. –

+0

Tôi không tuyên bố là một chuyên gia chỉ là một số kinh nghiệm với máy ảo và một số môi trường phức tạp. Ý tưởng tốt nhất của tôi cho những gì đang thực sự xảy ra là việc quản lý năng lượng cho trình điều khiển phần cứng là mâu thuẫn với các dịch vụ và quy trình yêu cầu truy cập liên tục và ngay lập tức vào trình điều khiển. Việc giữ cho trình điều khiển tiết kiệm năng lượng không thực tế đối với môi trường máy chủ; đó là để nói rằng tôi đã không bao giờ chạy một COA trên một card mạng, nhưng chỉ cần bao gồm nó trong chi phí hoạt động của bạn và loại bỏ nó như là một biến các vấn đề tiềm năng trong môi trường của bạn. –