2008-11-11 43 views
14

Tôi đang phát triển một ứng dụng cho đến nay bằng cách sử dụng HttpListener để cung cấp một máy chủ http độc lập nhỏ. Tuy nhiên, gần đây tôi đã phát hiện ra rằng HttpListener cần phải được chạy với tư cách Quản trị viên, điều này không phải lúc nào cũng có thể.Thay thế cho HttpListener?

Lựa chọn thay thế tốt nhất là gì? Tôi cần http GET và POST, cả hai đều không đơn giản là đọc/ghi các tệp trên hệ thống tệp, chúng cần chạy mã .Net tùy chỉnh.

Nghiên cứu của tôi cho đến nay đã đưa ra Cassini, nhưng theo như tôi có thể nói, tôi sẽ phải viết một phiên bản tùy chỉnh. Có gì khác? Trong một phần nào đó với giao diện tương tự như HttpListener, nhưng điều đó không yêu cầu đặc quyền của Quản trị viên sẽ là tuyệt vời!

+9

HttpListener không cần phải chạy với tư cách quản trị viên nếu bạn thực hiện đúng công cụ "netsh http add urlacl ..." đầu tiên –

Trả lời

8

Một thay thế mà tôi đã tìm thấy là C# Webserver trên CodePlex.

"... một máy chủ http linh hoạt có thể được nhúng vào bất kỳ ứng dụng .NET nào. Nó có thiết kế kiểu mô-đun nơi các tính năng được thêm bằng mô-đun. Máy chủ cũng hỗ trợ REST và tất cả các động từ http ..."

Nó có một lớp HttpListener mà tôi tưởng tượng là tương tự như System.Net.HttpListener, nhưng tôi đã không sử dụng một trong số chúng được nêu ra vì vậy tôi không thể chắc chắn.

+0

Tôi tin rằng đó là dựa trên socket, không cần quản trị viên. –

+0

, các liên kết của Chris Kimpton trỏ đến cùng một dự án, chỉ trên CodeProject thay vì CodePex. –

3

Một giải pháp cho việc này được bao gồm bởi this other question - bạn có thể tự cấp quyền chạy HttpListener với tư cách không phải là quản trị viên.

Bạn có thể bắt đầu ứng dụng từ tệp lệnh sắp xếp quyền và sau đó chạy ứng dụng thực.

+0

Đây không thực sự là một tùy chọn làm ứng dụng cần phải dễ dàng cài đặt như một ứng dụng máy tính để bàn thông thường. – Grokys

+0

Tôi đã đi xuống tuyến đường netsh. Tôi giả sử tôi có thể chạy lệnh netsh như một phần của trình cài đặt. Nhiều trình cài đặt yêu cầu quyền nâng cao, ngay cả khi ứng dụng không. –

0

Ok, vì vậy bạn có ứng dụng dành cho máy tính để bàn thông thường cần cho phép các kết nối http đến - hmm - tường lửa của Windows có phải là vấn đề không?

Giả sử không, nó có vẻ giống như một dịch vụ web - bạn có thể đi tuyến đường đó - hiển thị các URL thông qua đó không? Mặc dù kiến ​​thức .Net của tôi không đủ sâu để biết bạn vẫn cần chạy một máy chủ http cụ thể để trả lời các yêu cầu. Spring.Net có lẽ đáng xem.

+0

Không, nó sẽ chỉ nhận các kết nối từ máy chủ cục bộ - ứng dụng này là một proxy cho một ứng dụng Adobe AIR được cài đặt cùng một lúc. – Grokys

+0

Ngoài ra, tôi đã xem xét các dịch vụ web nhưng máy chủ sẽ chủ yếu phục vụ các tệp nhị phân, không phù hợp với dịch vụ web. – Grokys

3

Giống như những nhận xét của Will Dean về bài đăng của bạn nói, bạn có thể chạy lệnh netsh sau:

netsh http add urlacl url=http://+:8346/ user="NTAuthority\Authenticated Users" sddl="D:(A;;GX;;;AU)" 

Thay thế 'http: // +: 8346 /' với giá trị của mình, và điều này sẽ cho phép bất kỳ người dùng được xác thực nào để chạy máy chủ web tại điểm cuối đích.

+0

Điều này không hiệu quả đối với tôi; nó kết quả trong hệ thống nghe cho HTTP trên cổng cho trước, nhưng từ chối tất cả các kết nối với 503 Service Unavailable. – jimrandomh

+0

@jimrandomh - Thử đặt tên miền đầy đủ của bạn để đăng ký. Ví dụ: 'netsh http add url url url = http: //www.mytestdomain.com: 8346/người dùng =" NTAuthority \ Authenticated Users "sddl =" D: (A ;; GX ;;; AU) "' [Ngoài ra, bạn có thể kiểm tra/sửa đổi đặt chỗ url của mình bằng công cụ này - http://urlreservation.codeplex.com/](http://urlreservation.codeplex.com/) – ctrlplusb

+0

Và đừng quên cài đặt tường lửa của bạn. :) Tường lửa của bạn có thể đang chặn các kết nối. Hãy thử tắt tạm thời và sau đó thử kết nối lại để đảm bảo rằng đây không phải là vấn đề. – ctrlplusb

2

Về tuyên bố:

Gần đây tôi đã phát hiện ra rằng HttpListener cần phải được chạy as Administrator

Đó không phải là hoàn toàn đúng sự thật và một số các câu trả lời khác chạm vào một trong những lý do, nhưng có một số khác:

  1. Lưu ý bởi các áp phích khác: Bạn có thể cấp quyền cho người không phải là Quản trị viên. Tốt, nhưng không tuyệt.
  2. Bạn có thể nghe trên máy chủ cục bộ, ngay cả trên cổng 80, mà không phải là quản trị viên. Lưu ý: Tôi nhớ rằng chỉ có "localhost" hoạt động chứ không phải "127.0.0.1" ... vì vậy hãy chắc chắn rằng bạn chuyển localhost sang cuộc gọi Prefixes.Add của bạn.

Chúng tôi đang vận chuyển một công cụ nội bộ cho phép nhà phát triển chạy máy chủ ứng dụng dựa trên HTTP trên máy tính của họ và đầu tiên chúng tôi nghĩ rằng việc sử dụng HttpListener sẽ không thể thực hiện được do sự cố Quản trị viên (hoặc cấp quyền quản trị viên) , nhưng sau đó chúng tôi thấy rằng localhost hoạt động tốt mà không phải là Quản trị viên. Nó có ý nghĩa: lắng nghe bên ngoài là "nguy hiểm" nhưng nghe trên máy địa phương không phải là khá nguy hiểm.

0

Nowin là một thư điện tử tuyệt vời có thể được tích hợp trong OwinServerFactory mà không phụ thuộc vào HttpListener. Có thể thả thay thế Microsoft.Owin.Host.HttpListener lib mà không bị cản trở

+0

Xin chào, Iam bị kẹt ở cùng một điểm. Bạn có thể giúp tôi thay thế HttpListener không? –