2013-01-02 20 views
5

Khá nhiều như tiêu đề nói - Tôi đã cố gắng để có được điều này sẽ theo:Mono có khả năng lưu trữ ASP.NET MVC WebAPI trong mod_mono chưa?

http://www.integratedwebsystems.com/2011/12/get-started-with-amazon-ec2-run-your-net-mvc3-razor-site-in-the-cloud-with-linux-mono-2/

Và trong khi tôi có thể nhận được một rất đơn giản ASP MVC 4 chỗ đi - bất cứ điều gì với một dự án WebAPI tham gia cung cấp cho tôi 500 và các lỗi rất khó hiểu trong nhật ký apache của tôi:

System.NullReferenceException: Object reference not set to an instance of an object 
    at System.Web.Util.HttpEncoder.GetCustomEncoderFromConfig() [0x00000] in <filename unknown>:0 
    at System.Lazy`1[System.Web.Util.HttpEncoder].InitValue() [0x00000] in <filename unknown>:0 

Tôi đoán là không nhưng muốn biết tôi có đang làm gì sai cơ bản không!

Chúc mừng.

Trả lời

7

Kể từ Mono 3.0.2, ASP.NET WebAPI chưa được hỗ trợ. WebAPI sử dụng HttpRequest.GetBufferlessInputStream() để nhận dữ liệu yêu cầu HTTP, nhưng điều này chưa được triển khai trong Mono. Nếu bạn vượt qua các lỗi được đề cập ở trên (có thể do cấu hình không chính xác trong Web.config), bạn sẽ gặp lỗi tương tự với lỗi này:

Phương thức thiếu System.Web.HttpRequest :: GetBufferlessInputStream() trong assembly /opt/mono-3.0.0/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll, được tham chiếu trong assembly/tmp/www-data-temp-aspnet-0/2956977a/assembly/shadow/5cf10065/cf4140da_93b040bf_00000001/System.Web.Http.WebHost.dll

Xem https://bugzilla.xamarin.com/show_bug.cgi?id=8008 để biết báo cáo lỗi.

+0

Cảm ơn Daniel - bạn có biết đó có phải là trình chặn CHỈ để thực hiện công việc WebAPI hay chỉ là lần đầu tiên trong một con đường dài thay đổi cần thiết cho thời gian chạy Mono? –

+0

@KieranBenton Tôi không chắc chắn 100% - 'GetBufferlessInputStream' không được triển khai là rào cản lớn đầu tiên mà tôi gặp phải và tôi không chắc chắn cách tốt nhất để làm việc đó. Tại thời điểm này nó có thể là giá trị sử dụng ServiceStack thay vào đó, vì nó được thiết kế để chạy trên Mono và có hỗ trợ cộng đồng tuyệt vời. –

+2

HttpRequest.GetbufferlessInputStream() bây giờ đã được cố định với [yêu cầu kéo này] (https://github.com/mono/mono/pull/561#issuecomment-13977848). – MCattle

2

ServiceStack is no longer open source

Bạn có thể xem ServiceStack. Đó là một sự thay thế được hỗ trợ tốt cho WebApi và nó cũng chạy trên Mono. Nó rất nhanh, có thể mở rộng và mạnh mẽ; tài liệu của nó có thể được tìm thấy herehere.

+6

ServiceStack không còn là mã nguồn mở https://servicestack.net/pricing –

+1

Cảm ơn Donny, tôi biết điều đó ... bài đăng này đã được thực hiện trong khi nó vẫn là nguồn mở. –