HTTP không thể đăng ký URL http: // +: 8000 / HelloWCF /. Quá trình của bạn không có quyền truy cập vào không gian tên này


179

Tôi là người mới bắt đầu trong WCF, nhưng đang cố gắng cải thiện trải nghiệm của mình. Và trên bước đầu tiên tôi phải đối mặt với vấn đề. Tôi đã tạo ra dịch vụ WCF đơn giản nhất. Danh sách mã: (tất cả mã trong một tệp)

using System;
using System.ServiceModel;

namespace EssentialWCF
{
    [ServiceContract]
    public interface IStockService
    {
        [OperationContract]
        double GetPrice(string ticker);
    }

    public class StockService : IStockService
    {
        public double GetPrice(string ticker)
        {
            return 94.85;
        }
    }

    class Service
    {
        static void Main(string[] args)
        {
            ServiceHost serviceHost = new ServiceHost(typeof(StockService),
                                                        new Uri("http://localhost:8000/HelloWCF"));

            serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding());
            serviceHost.Open();

            Console.WriteLine("To continue press ENTER");

            serviceHost.Close();
        }
    }
}

Đó sẽ là dịch vụ cung cấp cho tôi một số thông qua bảng điều khiển. Nhưng gỡ lỗi cho tôi ngoại lệ: (thay vì số :))

HTTP không thể đăng ký URL http: // +: 8000 / HelloWCF / . Quá trình của bạn không có quyền truy cập vào không gian tên này (xem http://go.microsoft.com/fwlink/?LinkId=70353 để biết chi tiết).

Bạn đã bao giờ phải đối mặt với tình huống tương tự? Tôi sẽ vui mừng khi thấy mọi lời khuyên.


Tôi bối rối. Có phải văn bản thoát HTML đó là một phần của mã không?
Amy

1
tìm ở đây để có tùy chọn khác [ stackoverflow.com/questions/885744/ từ
shankbond

Câu trả lời:


231

Thật không may, liên kết trong văn bản ngoại lệ, http://go.microsoft.com/fwlink/?LinkId=70353 , bị hỏng. Tuy nhiên, nó được sử dụng để dẫn đến http://msdn.microsoft.com/en-us/l Library / ms733768.aspx giải thích cách đặt quyền.

Về cơ bản nó thông báo cho bạn sử dụng lệnh sau:

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

Bạn có thể nhận thêm trợ giúp về các chi tiết bằng cách sử dụng trợ giúp của netsh

Ví dụ: netsh http add ?

Cung cấp trợ giúp về http addlệnh.


3
Phương pháp này cũng hữu ích để thiết lập các quyền cần thiết trên máy chủ thử nghiệm tự động.
Technobabble

8
Đảm bảo chạy lệnh từ dấu nhắc của Quản trị viên.
mbonness

3
Nếu bạn không ở trên một miền, chỉ cần sử dụng COMPUTER_NAME\USER_NAMEtrong lệnh trên.
dotNET

bạn có thể chạy nó netsh http add urlacl url=http://+:80/ user=DOMAIN\usernếu bạn muốn cấp quyền truy cập tài khoản cho bất kỳ không gian tên nào trên cổng.
Hamid Heydarian

cái này nên được don trên máy khách hay máy chủ hay cả hai? và những gì nên được sử dụng trong http: //? ip của máy khách hay máy chủ? Như thường lệ, sự giúp đỡ là vô ích
GuidoG

177

Tôi đã đóng Visual Studio IDE và mở lại bằng cách nhấp chuột phải vào biểu tượng Visual Studio và nói "Chạy với tư cách quản trị viên", sau đó khi tôi chạy máy chủ, nó đã hoạt động !!!


17
Đầu tiên, đây là thực tế tồi mặc dù Visual Studio để lại ít sự lựa chọn ở đây. Thứ hai, vấn đề vẫn còn ở các bước khác (ví dụ như đã triển khai). Xem câu trả lời Bryan hay blogs.msdn.com/b/paulwh/archive/2007/05/04/...
Stéphane Gourichon

3
Thật đau buồn! Friggin MS, làm cho các chức năng khác nhau chiến đấu chính nó. Quá nhiều cho "đặc quyền tối thiểu".
Dan Csharpster

1
Thực hành tốt nhất hay không, đây là trên MS. Tại sao WCF / .NET lại đặc biệt đến nỗi nó cần thêm một vòng để nhảy qua? Nếu tôi viết một dịch vụ bằng Java chạy trên Windows, thì nó hoạt động cục bộ. Nếu tôi muốn đặt nó ở chế độ công khai, tôi điều chỉnh tường lửa, trình chuyển đổi, bộ định tuyến, v.v.
Kai Wang

1
-1. Đây không phải là điều chính xác để làm. Bạn nên cấp quyền rõ ràng cho người dùng bị hạn chế và sử dụng điều đó. Câu trả lời của Bryan dưới đây là tốt hơn.
Daniel James Bryars

2
-1. Nó giống như định dạng lại ổ cứng khi có vấn đề và nói rằng vấn đề đã được giải quyết. Câu trả lời là, như đã được chỉ ra, để chạy Netssh
Stan Bashtavenko 17/2/2016

19

Nhấp chuột phải vào Visual Studio> Chạy với tư cách Quản trị viên> Mở dự án của bạn và chạy dịch vụ. Đây là một vấn đề liên quan đặc quyền.


Đã làm cho tôi. Cảm ơn!
Mất

14

Bạn cần một số đặc quyền Quản trị viên cho tài khoản của mình nếu máy của bạn trong mạng cục bộ thì bạn áp dụng một số đặc quyền quản trị viên cho Người dùng khác, bạn nên bắt đầu làm ide với tư cách Quản trị viên ...


2
Đây là những gì tôi cần làm cho dịch vụ windows WCF của mình. Tôi đã sử dụng tài khoản miền mới để chạy dịch vụ trên máy dựng. Dịch vụ của tôi sẽ bắt đầu và sau đó ném ngoại lệ đó. Khi tôi trao cho nó quyền quản trị viên, nó hoạt động hoàn hảo.
thercix

Điều này đã giải quyết nó cho tôi. Chỉ cần nhấp chuột phải vào dịch vụ và trong tab "đăng nhập", chọn "Tài khoản hệ thống cục bộ"
Alexander Derck

11

Điều đơn giản bạn cần làm là đóng môi trường Visual Studio và mở lại bằng cách sử dụng 'Chạy với tư cách quản trị viên'. Bây giờ nó sẽ chạy thành công.


18
Chạy với tư cách quản trị viên chỉ tránh được các vấn đề, nó không giải quyết được chúng.
ProfK

6

Trong Windows Vista và sau đó, các dịch vụ HTTP WCF sẽ gây ra ngoại lệ bạn đã đề cập vì tài khoản bị hạn chế không có quyền đó. Đó là lý do tại sao nó hoạt động khi bạn chạy nó với tư cách quản trị viên.

Mọi nhà phát triển hợp lý phải sử dụng tài khoản RESTRICTED chứ không phải là Quản trị viên, nhưng nhiều người đã đi sai hướng và đó chính là lý do tại sao có rất nhiều ứng dụng ngoài đó cho phép quản trị viên DEMAND khi họ không thực sự cần thiết. Làm việc theo cách lười biếng dẫn đến các giải pháp lười biếng. Tôi hy vọng bạn vẫn làm việc trong một tài khoản bị hạn chế (xin chúc mừng).

Có một công cụ hiện có (từ năm 2008 trở đi) được gọi là NamespaceManagerTool nếu tôi nhớ chính xác được cho là cấp quyền hạn chế cho người dùng trên các URL dịch vụ mà bạn xác định cho WCF. Tôi đã không sử dụng nó mặc dù ...


Công cụ mà bạn nghĩ đến được gọi là Trình quản lý không gian http. Nó không được MS hỗ trợ nhưng nó có sẵn ở đây: blog.msdn.com/b/paulwh/archive 2007/05/04/21
Gareth

1

Mã mẫu của bạn sẽ không hoạt động như được hiển thị vì bạn quên bao gồm Console.ReadLine()trước serviceHost.Close()dòng. Điều đó có nghĩa là máy chủ được mở và sau đó đóng cửa ngay lập tức.

Ngoài ra, có vẻ như bạn có vấn đề về quyền trên máy của mình. Đảm bảo bạn đã đăng nhập với tư cách tài khoản quản trị viên trên máy của mình. Nếu bạn là quản trị viên thì có thể bạn không có Dịch vụ xuất bản World Wide Web (W3SVC) đang chạy để xử lý các yêu cầu HTTP.


Tôi đã khắc phục vấn đề này và đó không phải vì tài khoản cmd của tôi và (tất nhiên) không phải vì ReadLine () - vì lý do là ngoại lệ (không phải kết quả cmd).
valecoder

Tôi đã giải quyết điều đó với stackoverflow.com/questions/885744/ .
valecoder

1

Mặc dù tôi có thể giải quyết vấn đề này trong một máy tính theo các giải pháp của người dùng khác, nhưng lệnh netshkhông giải quyết được vấn đề ở một trong các máy của tôi và mặc dù người dùng hiện tại có quyền quản trị viên nhưng tôi vẫn nhận được "HTTP không thể đăng ký URL .... Quá trình của bạn không có quyền truy cập vào không gian tên này ". Vì vậy, tôi đang chia sẻ giải pháp của mình trong trường hợp bạn vẫn không làm cho nó hoạt động với các giải pháp khác.

Sau khi cũng cố gắng cấp quyền ghi cho người dùng trong thư mục vật lý của trang web của tôi và không thành công, cuối cùng tôi đã quyết định thử thay đổi cài đặt IIS .

Như các hình ảnh bên dưới hiển thị, tôi đã định cấu hình Thông tin xác thực đường dẫn vật lý trên trang web của mình để kết nối với tư cách là người dùng cụ thể, là tài khoản quản trị viên với tên người dùng và mật khẩu DOMAIN \ và điều này đủ để khiến lỗi không xuất hiện.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


-1

Đóng iis express và tất cả các trình duyệt (nếu url được mở trong bất kỳ trình duyệt nào). Cũng mở IDE studio hình ảnh trong chế độ quản trị viên. Điều này đã giải quyết vấn đề của tôi.


Nó không giải quyết được vấn đề. Sử dụng IDE trong chế độ Quản trị viên là một vấn đề khác và có thể nghiêm trọng hơn.
Preza8
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.