HTTP tidak dapat mendaftarkan URL http: // +: 8000 / HelloWCF /. Proses Anda tidak memiliki hak akses ke namespace ini

179

Saya seorang pemula di WCF, tetapi mencoba untuk meningkatkan pengalaman saya. Dan pada langkah pertama saya menghadapi masalah. Saya menciptakan layanan WCF paling sederhana. Daftar kode: (semua kode dalam satu file)

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();
        }
    }
}

Itu akan menjadi layanan yang memberi saya nomor melalui konsol. Tapi debug beri saya pengecualian: (bukan nomor :))

HTTP tidak dapat mendaftarkan URL http: // +: 8000 / HelloWCF / . Proses Anda tidak memiliki hak akses ke namespace ini (lihat http://go.microsoft.com/fwlink/?LinkId=70353 untuk detailnya).

Pernahkah Anda menghadapi situasi yang sama? Saya akan senang melihat setiap saran.

valecoder
sumber
Saya bingung. Apakah teks yang lolos HTML itu seharusnya menjadi bagian dari kode?
Amy
1
lihat di sini untuk opsi lain [ stackoverflow.com/questions/885744/…
shankbond

Jawaban:

231

Sayangnya tautan dalam teks pengecualian, http://go.microsoft.com/fwlink/?LinkId=70353 , rusak. Namun, ini digunakan untuk mengarah ke http://msdn.microsoft.com/en-us/library/ms733768.aspx yang menjelaskan cara mengatur izin.

Ini pada dasarnya memberitahu Anda untuk menggunakan perintah berikut:

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

Anda dapat memperoleh bantuan lebih lanjut tentang detail menggunakan bantuan netsh

Sebagai contoh: netsh http add ?

Memberi bantuan pada http addperintah.

Bryan
sumber
3
Metode ini juga berguna untuk mengatur izin yang diperlukan pada server pengujian otomatis.
Technobabble
8
Pastikan untuk menjalankan perintah dari prompt Perintah Administrator.
mbonness
3
Jika Anda tidak menggunakan domain, cukup gunakan COMPUTER_NAME\USER_NAMEperintah di atas.
dotNET
Anda dapat menjalankan ini netsh http add urlacl url=http://+:80/ user=DOMAIN\userjika Anda ingin memberikan hak akses akun ke ruang nama apa pun di port.
Hamid Heydarian
haruskah ini don pada mesin klien atau server atau keduanya? dan apa yang harus digunakan di http: //? ip klien atau server? Seperti biasa bantuan itu tidak berguna
GuidoG
177

Saya menutup Visual studio IDE dan membukanya kembali dengan mengklik kanan ikon Visual Studio dan mengatakan "Jalankan sebagai Administrator", Lalu ketika saya menjalankan host, Itu berhasil !!!

John Royceton Arthur
sumber
17
Pertama, ini adalah praktik buruk meskipun Visual Studio meninggalkan banyak pilihan di sini. Kedua, masalahnya tetap pada langkah-langkah lain (misalnya dikerahkan). Lihat jawaban Bryan atau blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon
3
Menyedihkan! Friggin MS, membuat fungsi berbeda yang bertarung dengan sendirinya. Begitu banyak untuk 'hak istimewa paling tidak'.
Dan Csharpster
1
Praktik terbaik atau tidak, ini ada di MS. Mengapa WCF / .NET begitu istimewa sehingga perlu satu lingkaran lagi untuk melompati? Jika saya menulis layanan di Java yang berjalan di Windows, bang itu berfungsi secara lokal. Jika saya ingin menjadikannya publik, saya menyesuaikan firewall, switcher, router, dll.
Kai Wang
1
-1. Ini bukan hal yang benar untuk dilakukan. Anda harus memberikan izin eksplisit kepada pengguna terbatas dan menggunakannya. @ Jawaban Bryan di bawah ini lebih baik.
Daniel James Bryars
2
-1. Itu sama dengan memformat ulang hard drive ketika ada masalah dan mengatakan masalah itu terpecahkan. Jawabannya adalah, seperti yang ditunjukkan, untuk menjalankan netssh
Stan Bashtavenko
19

Klik kanan pada Visual Studio> Jalankan sebagai Administrator> Buka proyek Anda dan jalankan layanan. Ini adalah masalah terkait hak istimewa.

pengguna3264537
sumber
Bekerja untukku. Terima kasih!
Losbear
14

Anda memerlukan hak istimewa Administrator untuk akun Anda jika mesin Anda di jaringan area lokal maka Anda menerapkan hak istimewa administrator untuk Pengguna Anda yang lain, Anda harus memulai ide sebagai Administrator ...

Pramod Lawate
sumber
2
Inilah yang perlu saya lakukan untuk layanan windows WCF saya. Saya menggunakan akun domain baru untuk menjalankan layanan di mesin build. Layanan saya akan mulai dan kemudian membuang pengecualian itu. Setelah saya memberinya hak administrator, itu berfungsi dengan baik.
thehelix
Ini menyelesaikannya untuk saya. Cukup klik kanan layanan, dan pada tab "log on" pilih "Akun Sistem Lokal"
Alexander Derck
11

Hal sederhana yang perlu Anda lakukan adalah menutup lingkungan Visual Studio Anda dan membukanya lagi dengan menggunakan 'Run as administrator'. Sekarang seharusnya berhasil dijalankan.

Mahesh.P
sumber
18
Berjalan sebagai admin hanya menghindari masalah, itu tidak menyelesaikannya.
ProfK
6

Di Windows Vista dan yang lebih baru, hal-hal layanan HTTP WCF akan menyebabkan pengecualian yang Anda sebutkan karena akun terbatas tidak memiliki hak untuk itu. Itulah alasan mengapa itu berfungsi ketika Anda menjalankannya sebagai administrator.

Setiap pengembang yang masuk akal harus menggunakan akun RESTRICTED daripada sebagai Administrator, namun banyak orang salah jalan dan itulah mengapa ada begitu banyak aplikasi di luar sana yang PERMINTAAN meminta izin admin ketika mereka tidak benar-benar diperlukan. Bekerja dengan cara malas menghasilkan solusi yang malas. Saya harap Anda masih bekerja di akun terbatas (selamat saya).

Ada alat di luar sana (dari 2008 atau lebih) yang disebut NamespaceManagerTool jika saya ingat dengan benar yang seharusnya memberikan izin pengguna terbatas pada URL layanan yang Anda tetapkan untuk WCF. Saya belum pernah menggunakan itu ...

Penguasa Script
sumber
Alat yang Anda pikirkan disebut Http Namespace Manager. Ini tidak didukung oleh MS tetapi tersedia di sini: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth
1

Kode sampel Anda tidak akan berfungsi seperti yang ditunjukkan karena Anda lupa menyertakan Console.ReadLine()sebelum serviceHost.Close()baris. Itu berarti tuan rumah dibuka dan kemudian segera ditutup.

Selain itu, sepertinya Anda memiliki masalah izin pada mesin Anda. Pastikan Anda masuk sebagai akun administrator di mesin Anda. Jika Anda seorang administrator maka mungkin Anda tidak menjalankan Layanan Penerbitan Web Luas Dunia (W3SVC) untuk menangani permintaan HTTP.

Sixto Saez
sumber
Saya sudah memperbaiki masalah ini dan itu bukan karena akun cmd saya dan (tentu saja) bukan karena ReadLine () - karena intinya adalah pengecualian (bukan hasil cmd).
valecoder
Saya menyelesaikannya dengan stackoverflow.com/questions/885744/… .
valecoder
1

Sementara saya bisa menyelesaikan masalah ini di satu komputer mengikuti solusi pengguna lain, perintah netshitu tidak menyelesaikan masalah di salah satu komputer saya dan meskipun pengguna saat ini memiliki hak administrator saya masih mendapatkan "HTTP tidak dapat mendaftarkan URL .... Proses Anda tidak memiliki hak akses ke namespace ini ". Jadi saya membagikan solusi saya jika Anda masih belum bisa bekerja dengan solusi lain juga.

Setelah juga mencoba memberikan izin menulis kepada pengguna di direktori fisik situs web saya dan tidak berhasil, akhirnya saya memutuskan untuk mencoba mengubah pengaturan IIS .

Seperti yang ditunjukkan gambar di bawah ini, saya mengkonfigurasi Kredensial Jalur Fisik situs web saya untuk terhubung sebagai pengguna tertentu, yang merupakan akun admin dengan DOMAIN \ nama pengguna dan kata sandi, dan ini cukup untuk membuat kesalahan menghilang.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Ulysses Alves
sumber
-1

Tutup iis express dan semua browser (jika url dibuka di salah satu browser). Juga buka IDE studio visual dalam mode admin. Ini telah menyelesaikan masalah saya.

Lokesh
sumber
Itu tidak menyelesaikan masalah. Menggunakan IDE dalam mode Administrator adalah masalah lain dan mungkin lebih serius.
Preza8