2011-03-12 26 views
37

Sto sviluppando un semplice servizio wcf per il test. Quando provo questo servizio con il mio IIS 7.5 locale, allora funziona correttamente. Ma quando ho ospitarlo in Web IIS, ricevo questo errore:Problema con il tipo di servizio nella direttiva ServiceHost nel servizio wcf

The type 'WcfServiceLibrary1.Service1', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

E il mio ServiceHost è:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %> 

Si prega di aiutarmi a risolvere questo problema

+0

penso di avere problemi con il montaggio –

+6

** Quali file ** hai distribuito sul tuo server web IIS ?? Hai bisogno di: una directory virtuale con il file * .svc al suo interno, e una directory 'bin' sotto con questa con DLL contenente il tuo servizio WCF –

+0

sì, creo una directory nel mio spazio host e copi tutto il mio progetto (WcfServiceLibrary1) in la mia directory (per test). ma il mio problema non è stato risolto !!! nel mio progetto esiste un file .svc e un servizio funzionante con iis locale correttamente –

risposta

20

provare a utilizzare il montaggio nome di tipo qualificato .

Questo è [Fully Qualified Type Name], [Assembly]

Dove [Fully Qualified Type Name] è, nei casi più comuni YourNamespace.YourType

E [Assembly] è, nei casi più comuni YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Diventa più complicato di questo (i tipi generici, annidati tipi ecc.) - ma è improbabile che lo sia nel tuo caso.

Se l'applicazione utilizza le opzioni di generazione di default, quindi ho intenzione di tentare di indovinare che la direttiva dovrebbe essere qualcosa di simile:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WcfServiceLibrary1.Service1, 
      WcfServiceLibrary1, 
      Version=1.0.0.0, 
      Culture=neutral, 
      PublicKeyToken=null" %> 

Anche se probabilmente si vorrà per sbarazzarsi della newlines lì.

Inoltre, assicurarsi che la DLL è stato effettivamente implementato

+2

* .dll file (include il mio servizio) è stato distribuito nella cartella Bin –

+0

per favore dammi un esempio ServiceHost con nome di tipo completo –

+0

@hamed ajorloo - risposta aggiornata –

4

Infine il mio problema risolto.

Ho rimosso la directory del servizio nel mio host e creato una nuova directory virtuale nello spazio dell'host. Quindi ho copiato il mio servizio nella nuova directory in cui l'ho creato.

Ora posso cercare il file .svc per il servizio e il mio cliente consumerà il servizio.

Non capisco perché si è verificato questo problema! Sono leggermente confuso!

+1

Avevo aggiunto il mio come semplice directory e avevo bisogno di convertirlo in un'applicazione. – tsilb

+0

il commento sopra è quello che dovevo fare per: nel mio localhost, la dir era un'applicazione o una directory virtuale, e quando mi sono installato sul www, avevo solo ftp'd roba lì. – pdschuller

8

Ho avuto lo stesso problema solo durante la pubblicazione del mio servizio ma ha funzionato localmente.

Si è scoperto che il servizio faceva riferimento a una DLL che non era stata distribuita. È un caso super speciale perché era una dll di sistema (System.Web.Helpers) e quindi il progetto non aveva nemmeno un riferimento e quindi "Copia locale" non era impostato su true.

+1

Sembra una cosa ridicola da controllare, ma mancava anche la mia DLL. –

+0

Avevo un assembly Microsoft.Identity che non era impostato su Copia locale e produceva solo questo errore quando distribuito in produzione, ma non durante l'esecuzione locale. Incredibilmente fastidioso, ma vero. –

+0

Una dll referenziata dal mio servizio dati non era presente nella cartella bin \ e ha generato l'errore. Aggiunta la dll mancante, il servizio ha funzionato. –

0

Un altro motivo per questo problema è spesso quando un servizio wcf viene spostato da una directory a un'altra e il file svc non è stato aggiornato ... la soluzione più semplice è il doppio controllo del file .svc e la definizione del servizio è definito correttamente.

39

Perché non riuscivo a trovare questo ha suggerito in una delle domande che ho guardato attraverso di questo, aggiungendo il mio caso qui:

Ho avuto questo problema quando ho cambiato manualmente lo spazio dei nomi di file nei MyService.svc.cs e non ha cambiato il nome del servizio nel file corrispondente MyService.svc - è risultato che doveva essere Service = "namespace.classname".

+4

Questo mi ha preso anche io, mentre mettevo insieme il mio primo servizio WCF "Hello World". Se cambi lo spazio dei nomi nel codice sottostante, non dimenticare di fare clic con il tasto destro del mouse su .svc, scegli 'mostra markup' e, come dice Jac, modifica anche lo spazio dei nomi. – Ted

+0

Stavo impazzendo finché non l'ho visto. grazie – Ric

+2

Questa correzione per lo spazio dei nomi si applica anche se si sta iniettando un'applicazione di servizio WCF esterna in un'applicazione Web ASP.NET come di seguito. Assicurarsi che lo spazio dei nomi è specificato nelle serviceActivations: ' ' – CrazyPyro

3

La risposta contrassegnata come risposta è molto difficile da comprendere. In effetti, anche se mi ha portato a risolvere il mio problema simile, non so se è perché capisco esattamente cosa significasse lo scrittore.

Stavo cercando se ho indirizzato un'applicazione IIS sul mio computer di sviluppo alla directory del progetto reale in cui risiedono le applicazioni web.config, MyService.svc e bin necessarie per l'applicazione del servizio WCF semplicemente non funzionerebbe, e stava lanciando questo errore. Questo nonostante il quadruplo che controlla ogni impostazione e garantisce che le cose siano equivalenti ad altre semplici applicazioni WCF funzionanti.

In definitiva, ho risolto il problema pubblicando in una directory diversa anziché in base ai file di progetto e alla directory stessa.

Forse perché i file erano aperti in Visual Studio mentre stavo cercando di eseguire l'applicazione WCF tramite IIS? Non lo so, ma Visual Studio ha fornito localhost: 59871/... funzionava. Non so se quell'istanza sta usando i file di progetto o una versione pubblicata temporanea.

+0

Man, vorrei poter sopravvivere 1000 volte. Ho trascorso circa 2 ore alla ricerca di una soluzione. – Anarion

1

Poiché non posso votare votare @jeromeyers al momento, voglio aggiungere che questa è la soluzione che ho trovato per questo problema.

Qualcuno aveva copiato e incollato un file svc e associato i file di contratto e di codice in un nuovo progetto, ma non avevano aggiornato ovunque lo spazio dei nomi e il nome della classe. Molto frustrante monitoraggio questo giù come è iniziato con questo errore:

"nome è stato avviato con un carattere non valido file di errore di risorse di elaborazione ':. /// C:/...

<% @ServiceHost"

quando si prova a fare clic con il pulsante destro del mouse sul file .svc e facendo "Visualizza nel browser".

4

Ho avuto lo stesso problema dopo aver distribuito un servizio di lavoro in una nuova posizione (nuovo sito) in IIS. In inetmgr sotto l'albero del sito Web predefinito, non avevo fatto clic con il pulsante destro del mouse sul nuovo sito e selezionato Converti in applicazione - tutto funziona ora!

7

IIS si aspetta di vedere il file svc nella directory virtuale e i file binari all'interno di una cartella bin (come commentato da marc_s).

Tuttavia, la configurazione di generazione predefinita per i progetti di libreria WCF consiste nel creare all'interno di una cartella bin/debug (o bin/release). È possibile modificare il percorso di uscita in "bin /" nella scheda di creazione delle proprietà del progetto.

La modifica ha risolto questo errore per me oggi.

1

Anche se questo è leggermente diverso dalla domanda (non web iis): Sono arrivato qui attraverso la ricerca perché stavo ottenendo questo errore cercando di eseguire il debug del mio servizio - se si dispone di più servizi all'interno di una singola soluzione, questo errore si verificano se la soluzione in questione non è ancora stata creata e quindi la DLL non viene creata quando si tenta di accedervi. Quindi, per chiunque altro là fuori, assicurati di eseguire localmente l'intera soluzione!

1

ha avuto questo problema nell'esecuzione di un progetto di test incorporato nella mia soluzione.

Ho dovuto visualizzare nel browser, quindi copiare quel collegamento a un nuovo riferimento di servizio (eliminare quello vecchio) quindi incollarlo anziché utilizzare il pulsante di utilità di ricerca nel riferimento del servizio.

0

Ho avuto lo stesso problema quando ho caricato il mio servizio di localhost funzionante in una nuova posizione sull'host. Ho creato una nuova directory virtuale e pubblicato il mio servizio tramite Visual Studio (FTP). Problema risolto.

0

E 'successo lo stesso per me e la soluzione è stata creare un forder chiamato "bin" e posizionare la DLL all'interno di esso. Quindi, aggiorna il sito Web su IIS e questo è tutto

0

Ho avuto questo problema e la magia per me è stata riavviare IIS. Questo è un errore molto strano.

0

enter image description hereenter image description here

La prima volta che ospita WCF Application Service, in IIS? Molti hanno risolto i loro problemi in un modo o nell'altro. Tuttavia se tutto è la soluzione è corretta e il tuo errore è di ospitare la tua app in IIS, assicurati che il tuo percorso fisico in IIS quando aggiungi il tuo sito web sia indirizzato alla directory "bin" della tua soluzione come mostrato di seguito nelle schermate.

0

prega di guardare al https://msdn.microsoft.com/en-us/library/ms733766(v=vs.100).aspx

Hai bisogno di fare 2 cose da essere in grado di ospitare il servizio su IIS, o anche su IIS_EXPRESS itergrated Visual Studio.

1) Aggiornare il web.config per includere ServiceActivations

cambiamento:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 

a

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> 
    <serviceActivations> 
    <add service="API.Service1" relativeAddress="Service1.svc"/> 
</serviceActivations> 
</serviceHostingEnvironment> 

2) È necessario creare una directory denominata App_Code nella directory principale. Ora è necessario spostare il servizio (ad esempio Service1.svc) dalla directory principale nella directory App_Code. Quindi avrai App_Code \ Service1.svc

Se navighi sul Servizio http://localhost:63309/Service1.svc dovrebbe funzionare.

2

Controllare se lo spazio dei nomi e la classe scritti in "Servizio" di "SeviceHost" sono corretti. Deve essere Service="namespace.classname".

+0

Questo lo ha risolto per me. Il codice di conversione che viene eseguito dopo aver fatto clic su "converti in progetto applicazione web" ha dato (il precedente progetto del sito Web) un nuovo spazio dei nomi che NON era anteposto al nome classe del servizio nel file SVC. –

1

Strano pure, dopo aver cercato e provato altri suggerimenti, ricevevo ancora l'errore dicendo: Il tipo ', fornito come valore dell'attributo Servizio nella direttiva ServiceHost o fornito nell'elemento di configurazione system.serviceModel/serviceHostingEnvironment/serviceLe attività di ricerca non sono state trovate.

Sicuramente tutti abbiamo un progetto di grandi dimensioni con un sacco di DLL. Sono venuti fuori alcuni dei componenti più vecchi della mia soluzione. Net 4.5 e le nuove dll sono state costruite con 4.5.1. Quando le 4.5 DLL hanno fatto riferimento alle dll 4.5.1 ... Non sono sicuro del motivo per cui ero la piccola porcellino felice di essere la prima nella mia squadra a trovarlo. Mentre la correzione era ovvia e abbastanza facile, solo tutte le DLL per raggiungere lo stesso runtime .Net.

solo che Visual Studio notasse DLL all'interno della stessa soluzione dovrebbe indirizzare tutto lo stesso runtime .NET e generare un avviso/errore quando si costruisce soprattutto con noi abbiamo una soluzione e un riferimento al progetto e tempi di esecuzione non abbiniamo .. .

+0

Nel mio caso il motivo era simile. di riferimento in ServiceHost a InterfaceLib, che è stato implementato dal servizio specificato nel file .svc – krzyski

Problemi correlati