2012-01-04 12 views
146

WCF'de yeni başlayan biriyim ama deneyimimi geliştirmeye çalışıyorum. Ve ilk adımda problemle karşılaştım. En basit WCF hizmetini oluşturdum. Kod listesi: (bir dosyada tüm kod)HTTP, URL http: // +: 8000/HelloWCF /. İşleminiz bu ad alanı için erişim haklarına sahip değil.

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

Bu bana konsol üzerinden bir numara veren hizmet olurdu. Ancak hata ayıklama bana istisna verir: (sayı yerine :))

HTTP URL http://+:8000/HelloWCF/ kayıt olamazdı. İşleminizin bu ad alanına erişim hakları yoktur (ayrıntılar için bkz. http://go.microsoft.com/fwlink/?LinkId=70353).

Hiç aynı durumla karşılaştın mı? Her tavsiyeyi görmekten memnun olurum.

+0

enter image description here

enter image description here

kafam karıştı. Bu HTML kaçağı metnin kodun parçası olması gerekiyor mu? – Amy

+1

diğer seçenek için buraya bak [http://stackoverflow.com/questions/885744/wcf-servicehost-access-rights] Zaten bu sorunu giderdik ve bu, çünkü benim cmd ait değil – shankbond

+0

Teşekkürler (bir hesap ve course) ReadLine() nedeniyle değil - neden nokta istisnadır (cmd sonucu değil). – User

cevap

0

serviceHost.Close() satırından önce Console.ReadLine() eklemeyi unuttuğunuzdan, örnek kodunuz gösterildiği gibi çalışmaz. Yani ev sahibi açılır ve hemen kapatılır.

Bunun dışında, makinenizde bir izin sorununuz var gibi görünüyor. Makinenizde yönetici hesabı olarak oturum açtığınızdan emin olun. Yöneticiyseniz, HTTP isteklerini işlemek için World Wide Web Publishing Service (W3SVC) çalıştırmanızın olmayabilir.

+0

@shankbond – valecoder

+0

Bunu http://stackoverflow.com/questions/885744/wcf-servicehost-access-rights ile çözdüm. – valecoder

160

Visual studio IDE'yi kapattım ve Visual Studio simgesine sağ tıklayıp "Yönetici olarak çalıştır" diyerek yeniden açtı, sonra ana bilgisayarı çalıştırdığımda, Çalıştı !!!

+16

İlk olarak, bu, Visual Studio'nun burada çok az seçenek bırakmasına rağmen, bu kötü bir uygulamadır. İkincisi, problem diğer aşamalarda (örneğin dağıtılmış) kalır. Bryan'ın yanıtına bakın veya http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx –

+3

İyi keder! Friggin MS, kendini savaşan farklı işlevler yapıyor. 'En az ayrıcalık' için çok fazla. –

+0

En iyi uygulama ya da değil, bu MS üzerindedir. WCF/.NET neden bu kadar özeldir ki atlamak için bir tane daha kaska ihtiyacı var? Java'da Windows üzerinde çalışan bir servis yazarsak, yerel olarak çalışır. Bunu halka açık yapmak istiyorsam, güvenlik duvarı, anahtarlayıcı, yönlendirici vb. Ayarlarım –

4

Windows Vista ve sonraki sürümlerde, HTTP WCF hizmeti öğeleri, kısıtlanmış bir hesabın bunun için doğru olmadığı için, belirttiğiniz kural dışı durumlara neden olabilir. Bunu yönetici olarak çalıştırdığınızda çalışmasının nedeni budur.

Her mantıklı geliştiricinin Yönetici olarak değil RESTRICTED bir hesap kullanması gerekir, ancak birçok kişi yanlış yöne gitmelidir ve tam olarak bu nedenle DEMAND yönetici izinlerinin gerçekten gerekli olmadıklarında o kadar çok uygulama olduğu nedenidir. Tembel bir şekilde çalışmak, tembel çözümlerle sonuçlanır. Umarım hala kısıtlı bir hesapta çalışırsınız (tebrikler).

WCF için tanımladığınız bu hizmet URL'lerinde kısıtlanmış kullanıcı izinleri vermesi gerektiği doğru bir şekilde hatırlamıyorsam, NamespaceManagerTool adlı bir araç var (2008'den itibaren). Ben ...

yerel alan ağı içinde makine o zaman başka sizin Kullanıcıya bazı yönetici ayrıcalığı uygularsanız olsa ...
+0

Düşünmekte olduğunuz araç, Http Ad Alanı Yöneticisi olarak adlandırılır. MS tarafından desteklenmiyor, ancak şu adreste mevcut: http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx – Gareth

11

Sen yönetici olarak ide başlamalıdır hesabınızda bazı yönetici ayrıcalığı gerektiğini kullanmadıysanız
+1

Bu WCF windows servisim için yapmam gereken şey. Hizmeti bir yapım makinesinde çalıştırmak için yeni bir etki alanı hesabı kullanıyordum. Hizmetim işe başlayacak ve sonra bu istisnayı atacaktı.Yönetici haklarını verdikten sonra mükemmel çalıştı. – thehelix

+0

Bu, benim için çözüldü. Servisi sağ tıklatın ve "oturum aç" sekmesinde "Yerel Sistem hesabı" nı seçin –

185

Maalesef, istisna metnindeki bağlantı, http://go.microsoft.com/fwlink/?LinkId=70353, bozuktur. Ancak, izinlerin nasıl ayarlanacağını açıklayan http://msdn.microsoft.com/en-us/library/ms733768.aspx'a yol açardı.

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

Sen Örneğin netsh

yardımıyla kullanarak ayrıntılar üzerinde daha fazla yardım alabilirsiniz

: netsh http add ?

yardım verir

Temelde aşağıdaki komutu kullanmak bilgilendirir http add komutunda.

+3

Bu yöntem, otomatik bir sınama sunucusunda gerekli izinleri ayarlamak için de kullanışlıdır. – Technobabble

+6

Bu kabul edilen cevap olmalı. –

+3

Komutu bir Yönetici Komutu isteminden çalıştırdığınızdan emin olun. – mbonness

8

yapmanız gereken basit bir şey Visual Studio ortamını kapatıp 'Yönetici olarak çalıştır' kullanarak yeniden açmaktır. Şimdi başarıyla çalıştırılmalıdır.

+12

Sadece yönetici olarak çalıştırmak problemleri önler, çözmez. – ProfK

0

iis express'i ve tüm tarayıcıları kapatın (URL tarayıcıdan herhangi birinde açılmışsa). Ayrıca yönetici modunda görsel stüdyo IDE'yi açın. Bu benim sorunumu çözdü.

7

Visual Studio'ya sağ tıklayın> Yönetici olarak çalıştır> Projenizi açın ve hizmeti çalıştırın. Bu bir ayrıcalıkla ilgili sorun.

0

Bu sorunu diğer kullanıcıların çözümlerini izleyerek tek bir bilgisayarda çözebildiğim halde, netsh komutu, makinelerimden birinde sorunu çözmedi ve geçerli kullanıcı yönetici haklarına sahip olsa da hala "HTTP URL'yi kaydedemedi ... İşleminiz bu ad alanına erişim haklarına sahip değil". Öyleyse, çözümümüzü diğer çözümlerle de çalışmaya devam etmemeniz durumunda paylaşıyorum.

Ayrıca web sitemin fiziksel dizinindeki kullanıcıya yazma izni vermeye ve başarılı olmaya çalışmadan sonra, IIS ayarlarını değiştirmeye karar verdim. göstermek Aşağıdaki resimlere olarak

, Web sitemin DOMAIN \ kullanıcı adı ve şifre ile bir yönetici hesabı olan bir Spesifk kullanıcı olarak bağlanmak için Fiziksel Yol Kimlik yapılandırılmış ve bu hata yok yapmak için yeterliydi.

enter image description here