HTTP ไม่สามารถลงทะเบียน URL http: // +: 8000 / HelloWCF / กระบวนการของคุณไม่มีสิทธิ์เข้าถึงเนมสเปซนี้


179

ฉันเป็นผู้เริ่มต้นใน WCF แต่พยายามปรับปรุงประสบการณ์ของฉัน และในขั้นตอนแรกฉันประสบปัญหา ฉันสร้างบริการ WCF ที่ง่ายที่สุด รายชื่อของรหัส: (รหัสทั้งหมดในไฟล์เดียว)

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

นั่นจะเป็นบริการที่ให้หมายเลขแก่ฉันผ่านทางคอนโซล แต่แก้ปัญหาให้ฉันข้อยกเว้น: (แทนหมายเลข :))

HTTP ไม่สามารถลงทะเบียน URL http: // +: 8000 / HelloWCF / กระบวนการของคุณไม่มีสิทธิ์เข้าถึงเนมสเปซนี้ (ดูhttp://go.microsoft.com/fwlink/?LinkId=70353เพื่อดูรายละเอียด)

คุณเคยเผชิญกับสถานการณ์เดียวกันหรือไม่? ฉันยินดีที่จะเห็นทุกคำแนะนำ


ฉันสับสน ข้อความที่ใช้ HTML นั้นควรจะเป็นส่วนหนึ่งของรหัสหรือไม่?
Amy

1
ดูที่นี่สำหรับตัวเลือกอื่น ๆ [ stackoverflow.com/questions/885744/…
shankbond

คำตอบ:


231

น่าเสียดายที่ลิงก์ในข้อความยกเว้นhttp://go.microsoft.com/fwlink/?LinkId=70353เสีย อย่างไรก็ตามจะใช้เพื่อนำไปสู่http://msdn.microsoft.com/en-us/library/ms733768.aspxซึ่งอธิบายวิธีตั้งค่าการอนุญาต

โดยทั่วไปแจ้งให้คุณใช้คำสั่งต่อไปนี้:

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

คุณสามารถขอความช่วยเหลือเพิ่มเติมเกี่ยวกับรายละเอียดโดยใช้ความช่วยเหลือของ netsh

ตัวอย่างเช่น: netsh http add ?

ให้ความช่วยเหลือกับhttp addคำสั่ง


3
วิธีนี้ยังมีประโยชน์สำหรับการตั้งค่าการอนุญาตที่จำเป็นบนเซิร์ฟเวอร์ทดสอบอัตโนมัติ
Technobabble

8
ตรวจสอบให้แน่ใจว่าได้รันคำสั่งจากพรอมต์คำสั่งของผู้ดูแลระบบ
mbonness

3
หากคุณไม่ได้อยู่ในโดเมนเพียงใช้COMPUTER_NAME\USER_NAMEในคำสั่งด้านบน
dotNET

คุณสามารถเรียกใช้สิ่งนี้netsh http add urlacl url=http://+:80/ user=DOMAIN\userหากคุณต้องการให้สิทธิ์การเข้าถึงบัญชีแก่เนมสเปซใด ๆ บนพอร์ต
ฮามิดเฮดาร์เรียน

สิ่งนี้ควรถูกนำไปไว้บนเครื่องไคลเอ็นต์หรือเซิร์ฟเวอร์หรือทั้งสองอย่าง? ควรใช้อะไรใน http: //? ip ของไคลเอนต์หรือเซิร์ฟเวอร์? ตามปกติความช่วยเหลือนั้นไร้ประโยชน์
GuidoG

177

ฉันปิด Visual Studio IDE และเปิดใหม่โดยคลิกขวาที่ไอคอน Visual Studio และพูดว่า "Run as Administrator" จากนั้นเมื่อฉันโฮสต์โฮสต์มันทำงานได้ !!!


17
อย่างแรกนี่คือการฝึกฝนที่ไม่ดีแม้ว่า Visual Studio จะปล่อยทางเลือกเพียงเล็กน้อยที่นี่ ประการที่สองปัญหายังคงอยู่ในขั้นตอนอื่น ๆ (เช่นปรับใช้) ดูคำตอบของไบรอันหรือblogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon

3
ความเศร้าโศกที่ดี! Friggin MS ทำให้การทำงานที่แตกต่างที่ต่อสู้ตัวเอง มากสำหรับ 'สิทธิ์น้อย'
Dan Csharpster

1
การปฏิบัติที่ดีที่สุดหรือไม่นี้เป็นใน MS ทำไม WCF / .NET ถึงพิเศษมากจนต้องการห่วงเพิ่มอีกหนึ่งข้าม ถ้าฉันเขียนบริการใน Java ที่ทำงานบน Windows ให้ทำงานได้ในท้องถิ่น ถ้าฉันต้องการทำให้เป็นสาธารณะฉันจะปรับไฟร์วอลล์ตัวสลับเราเตอร์และอื่น ๆ
Kai Wang

1
-1 นี่ไม่ใช่สิ่งที่ถูกต้องที่จะทำ คุณควรให้สิทธิ์อย่างชัดเจนแก่ผู้ใช้ที่ถูก จำกัด และใช้สิ่งนั้น @Brian คำตอบด้านล่างจะดีกว่า
Daniel James Bryars

2
-1 มันเหมือนกับการฟอร์แมตฮาร์ดไดรฟ์ใหม่เมื่อมีปัญหาและบอกว่าปัญหาได้รับการแก้ไขแล้ว คำตอบคือตามที่มันถูกชี้ให้เห็นเพื่อเรียกใช้ netssh
Stan Bashtavenko

19

คลิกขวาที่ Visual Studio> เรียกใช้ในฐานะผู้ดูแล> เปิดโครงการของคุณและเรียกใช้บริการ นี่เป็นปัญหาที่เกี่ยวข้องกับสิทธิ์


ทำงานให้ฉัน ขอบคุณ!
Losbear

14

คุณต้องมีสิทธิ์ผู้ดูแลระบบบางส่วนสำหรับบัญชีของคุณหากเครื่องของคุณในเครือข่ายท้องถิ่นคุณใช้สิทธิ์ผู้ดูแลระบบบางอย่างกับผู้ใช้ของคุณคุณควรเริ่มต้น IDE ในฐานะผู้ดูแลระบบ ...


2
นี่คือสิ่งที่ฉันต้องทำเพื่อให้บริการ WCF windows ของฉัน ฉันใช้บัญชีโดเมนใหม่เพื่อเรียกใช้บริการบนเครื่องสร้าง บริการของฉันจะเริ่มต้นแล้วโยนข้อยกเว้นนั้น เมื่อฉันให้สิทธิ์ผู้ดูแลระบบแล้วมันก็ทำงานได้อย่างสมบูรณ์
thehelix

วิธีนี้แก้ไขได้สำหรับฉัน เพียงคลิกขวาที่บริการและในแท็บ "เข้าสู่ระบบ" เลือก "บัญชีระบบท้องถิ่น"
Alexander Derck

11

สิ่งง่าย ๆ ที่คุณต้องทำคือปิดสภาพแวดล้อม Visual Studio ของคุณและเปิดอีกครั้งโดยใช้ 'Run as administrator' ตอนนี้มันควรจะทำงานได้สำเร็จ


18
ทำงานเป็นผู้ดูแลระบบเพียงหลีกเลี่ยงปัญหามันไม่ได้แก้ปัญหา
ProfK

6

ใน Windows Vista และใหม่กว่าสิ่งบริการ HTTP WCF จะทำให้เกิดข้อยกเว้นที่คุณกล่าวถึงเนื่องจากบัญชีที่ถูก จำกัด ไม่มีสิทธิ์นั้น นั่นคือเหตุผลที่มันทำงานเมื่อคุณวิ่งในฐานะผู้ดูแลระบบ

นักพัฒนาที่มีเหตุผลทุกคนจะต้องใช้บัญชี RESTRICTED แทนที่จะเป็นผู้ดูแลระบบ แต่มีคนจำนวนมากไปในทางที่ผิดและนั่นคือเหตุผลที่ว่าทำไมมีแอปพลิเคชั่นจำนวนมากออกไปที่นั่น การทำงานด้วยวิธีขี้เกียจส่งผลให้เกิดโซลูชันที่ขี้เกียจ ฉันหวังว่าคุณยังคงทำงานในบัญชีที่ถูก จำกัด (ขอแสดงความยินดีด้วย)

มีเครื่องมือออกมี (จาก 2008 หรือมากกว่านั้น) ที่เรียกว่า NamespaceManagerTool ถ้าฉันจำได้อย่างถูกต้องที่ควรให้สิทธิ์ผู้ใช้ที่ถูก จำกัด กับ URL บริการเหล่านี้ที่คุณกำหนดสำหรับ WCF ฉันไม่ได้ใช้มันแม้ว่า ...


เครื่องมือที่คุณคิดว่าเรียกว่า Http Namespace Manager มันไม่ได้รับการสนับสนุนจาก MS แต่มีให้ที่นี่: blogs.msdn.com/b/paulwh/archive/2007/05/04/ …
Gareth

1

ตัวอย่างรหัสของคุณจะไม่ทำงานตามที่ปรากฏเพราะคุณลืมที่จะรวมถึงConsole.ReadLine()ก่อนที่จะserviceHost.Close()สาย นั่นหมายถึงโฮสต์ถูกเปิดแล้วปิดทันที

นอกเหนือจากนั้นดูเหมือนว่าคุณมีปัญหาสิทธิ์ในเครื่องของคุณ ให้แน่ใจว่าคุณเข้าสู่ระบบในฐานะบัญชีผู้ดูแลระบบบนเครื่องของคุณ หากคุณเป็นผู้ดูแลระบบอาจเป็นเพราะคุณไม่มี World Wide Web Publishing Service (W3SVC) ที่ทำงานเพื่อจัดการคำขอ HTTP


ฉันได้แก้ไขปัญหานี้แล้วและนั่นไม่ใช่เพราะบัญชี cmd ของฉันและ (แน่นอน) ไม่ใช่เพราะ ReadLine () - ทำให้จุดอยู่ในข้อยกเว้น (ไม่ใช่ผลลัพธ์ cmd)
valecoder

ฉันจะแก้ไขด้วยstackoverflow.com/questions/885744/...
valecoder

1

ในขณะที่ฉันสามารถแก้ไขปัญหานี้ในคอมพิวเตอร์เครื่องหนึ่งที่ทำตามวิธีแก้ไขปัญหาของผู้ใช้คนอื่นคำสั่งnetshไม่ได้แก้ปัญหาในหนึ่งในเครื่องของฉันและแม้ว่าผู้ใช้ปัจจุบันมีสิทธิ์ผู้ดูแลระบบฉันยังได้รับ"HTTP ไม่สามารถลงทะเบียน URL .... กระบวนการของคุณไม่มีสิทธิ์เข้าถึงเนมสเปซนี้ " ดังนั้นฉันจะแบ่งปันโซลูชันของฉันในกรณีที่คุณยังไม่ได้ทำงานกับโซลูชันอื่น ๆ ด้วย

หลังจากพยายามให้สิทธิ์การเขียนแก่ผู้ใช้ในไดเรกทอรีทางกายภาพของเว็บไซต์ของฉันและไม่ประสบความสำเร็จในที่สุดฉันก็ตัดสินใจลองเปลี่ยนการตั้งค่า IISเปลี่ยนแปลงการตั้งค่า

ตามภาพด้านล่างแสดงให้เห็นว่าฉันกำหนดค่าข้อมูลประจำตัวเส้นทางกายภาพของเว็บไซต์ของฉันเพื่อเชื่อมต่อในฐานะผู้ใช้ที่ระบุซึ่งเป็นบัญชีผู้ดูแลระบบที่มี DOMAIN \ ชื่อผู้ใช้และรหัสผ่านและนี่ก็เพียงพอแล้วที่จะทำให้เกิดข้อผิดพลาด

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


-1

ปิด iis express และเบราว์เซอร์ทั้งหมด (หากเปิด url ในเบราว์เซอร์ใดก็ได้) ยังเปิด visual studio IDE ในโหมดผู้ดูแลระบบ นี่เป็นการแก้ไขปัญหาของฉัน


มันไม่ได้แก้ปัญหา การใช้ IDE ในโหมดผู้ดูแลระบบเป็นปัญหาอื่นและอาจรุนแรงขึ้น
Preza8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.