it-swarm.com.de

WCF, Service-Attributwert in der ServiceHost-Direktive konnte nicht gefunden werden

Ich versuche, meinen Dienst mit IIS 6 zu hosten, erhalte aber weiterhin diese Ausnahme.

    Server Error in '/WebServices' Application.
--------------------------------------------------------------------------------

The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the Origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.]
   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +6714599
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +604
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +46
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +654

[ServiceActivationException: The service '/WebServices/dm/RecipientService.svc' cannot be activated due to an exception during compilation.  The exception message is: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found..]
   System.ServiceModel.AsyncResult.End(IAsyncResult result) +15626880
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15546921
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 

Ich habe absolut keine Ahnung, außer dass es so aussieht, als würde es meine Baugruppen nicht finden. Der Code sollte mit öffentlichen Klassen korrekt kompiliert werden.

Hier ist meine .svc-Datei:

<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>

Ich habe versucht, einen sehr einfachen Dienst zu erstellen, der nur nichts enthält, um zu sehen, ob dies funktioniert, aber immer noch der gleiche alte Fehler angezeigt wird.

The type 'IISHost.Service1', provided as the Service attribute value in the ServiceHost directive could not be found. 
67
nandarya

Option eins:

Diese Meldung ist häufig auf ein Konfigurationsproblem von IIS 7 zurückzuführen. Wenn Sie es gewohnt sind, ein virtuelles Verzeichnis zu erstellen, das auf den Ordner verweist, in dem sich Ihr Dienst befindet, funktioniert das nicht mehr. Jetzt müssen Sie stattdessen die Option "Anwendung erstellen ..." verwenden.

Andere Optionen:

60

Das Problem kann sich auch in einem anderen Namespace in der svc-Datei befinden, als in der svc.cs-Datei.

In der svc-Datei muss der Namespace das folgende Format haben.

Service="Namespace.SvcClassName"
68
Peter Stegnar

Ich weiß, dass dies wahrscheinlich die "offensichtliche" Antwort ist, aber es hat mich ein bisschen gestört. Stellen Sie sicher, dass sich im Bin-Ordner eine DLL für das Projekt befindet. Als der Dienst veröffentlicht wurde, löschte der Typ, der ihn veröffentlicht hatte, die DLLs, weil er der Meinung war, dass sie im GAC waren. Die speziell für das Projekt (in diesem Fall QS.DialogManager.Communication.IISHost.RecipientService.dll) war nicht vorhanden.

Gleicher Fehler aus einem sehr anderen Grund.

30
baileyrt

Dieser Fehler tritt aufgrund einer Nichtübereinstimmung des Dienstnamens in der .SVC-Datei auf. Möglicherweise haben Sie möglicherweise den Namen der Serviceklasse geändert, die die Schnittstelle implementiert. Die Lösung besteht darin, die .SVC-Datei zu öffnen und das Service-Attribut und das CodeBehind-Attribut genau zuzuordnen. Ihre .SVC-Datei sollte also ähnlich sein

<%@ ServiceHost Language="Language you are using" Debug="bool value to enable debugging" Service="Service class name that is implementing your Service interface" Codebehind="~/Appcode/Class implementing interface.cs"%>. for eg.

<%@ ServiceHost Language="C#" Debug="true" Service="Product.Service" CodeBehind=~/AppCode/Product.Service.cs"%>

Dieses Beispiel bezieht sich auf eine .svc-Datei, die die C # -Sprache verwendet, wobei Debugging aktiviert ist, die Schnittstelle zur Implementierung der Serviceklasse implementiert ist. Diese Klasse befindet sich im App-Ordner mit dem Namen Service.cs und der Product-Namespace für die Serviceklasse.

Nehmen Sie auch entsprechende Änderungen in der Service-Konfigurationsdatei vor.

 <system.serviceModel>
    <services>
    <service name="Product.Service" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="Product.Iservice">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
    </services>
    <behaviors>
    <behavior name="ServiceBehavior">
    <serviceMetaData httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
    </behaviors>
    </system.serviceModel>
11
Chandra Malla

Vergewissern Sie sich, dass Sie den richtigen Typ aus der ServiceHost-Direktive in der .svc-Datei referenzieren. Hier ist wie...

  1. Öffnen Sie im VS-Projekt, das Ihren Webdienst enthält, die SVC-Datei im XML-Editor (klicken Sie mit der rechten Maustaste auf die Datei, Öffnen mit ... und wählen Sie XML (Text) Editor, OK). 
  2. Beachten Sie den Attributwert "Service". 
  3. Stellen Sie sicher, dass es dem vollständig qualifizierten Typnamen Ihres Dienstes entspricht. Dies beinhaltet den Namespace + Typnamen. Wenn der Namespace beispielsweise "MyCompany.Department.Services" lautet und die Klasse "MyService" heißt, sollte der Service-Attributwert "MyCompany.Department.Services.MyService" sein.
9
charlie249

Ich hatte die gleiche Ausnahme, dies liegt daran, dass der Typ in der .svc-Datei nicht richtig erwähnt wird

Ich korrigierte mit untenstehendem Fix.

wenn Ihre .svc.cs-Klasse so ist

namespace Azh.Services.MyApp
{
    public class WcfApp : FI.IWcfAppService
{
...
}
}

dafür sollte die .svc-Datei so aussehen

<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>
7
zahirhas

Sie sollten den Pfad Ihres Bin-Ordners für die lokale Bin des Services konfigurieren.

4
Kishor

Ich habe das gleiche Problem praktisch gelöst. Hier ist mein Vorschlag - Der Fehler bedeutet, dass das im Attribut Service referenzierte Objekt nicht gefunden wurde. Damit das Objekt gefunden werden kann, muss die Anwendung oder Bibliothek eine Ausgabe im Ordner bin erstellen.

Sie können die Eigenschaftenseite der Anwendung bearbeiten und den Ausgabepfad auf 'bin' angeben.

2
Dayakumar

Wenn Sie etwas umbenannt haben, überprüfen Sie, ob (Properties /) AssemblyInfo.cs sowie der Header in der Servicedatei korrekt sind.

ServiceName.svc

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>

An Ihrem Namespace in Ihrem Service.svc.cs ausrichten

2
lko

Ich hatte meine Dienst-DLLs im Ordner bin, in dem sich die SVC-Datei befand. Das Verschieben der DLLs in den Stammordner hat das Problem gelöst.

1

Das klingt vielleicht trivial, aber erwähnenswert: Sie müssen build den Dienst (in Visual Studio) - dann wird ein DLL im Unterordner Bin erstellt.

Wenn der Dienst auf einem Server "bereitgestellt" ist, muss der Ordner "bin" die DLL -Datei enthalten. Andernfalls wird dieser Fehler ausgelöst.

1
Yuval A.

Ich hatte dieses Problem - mein Servicetyp war im GAC. Es würde funktionieren, wenn ich die Dll, die den Typ enthält, in den Ordner bin, aber da es im GAC war, war es NICHT das, was ich wollte. Ich habe dies schließlich der web.config für den Dienst hinzugefügt

<system.web>
    <customErrors mode="RemoteOnly" />
    <compilation debug="true" targetFramework="4.0">
        <assemblies>
            <add Assembly="[name in GAC], Version=[version in GAC], Culture=neutral, PublicKeyToken=[ac token]" />
        </assemblies>
    </compilation>
</system.web>

und es funktionierte ohne dlls im bin-ordner.

1
Jason9364

Ich war heute mit diesem Fehler konfrontiert, die Vernunft war; IIS Benutzer hat keine Berechtigung, den Anwendungsordner zu erreichen. Ich habe dem Stammordner der App die Leseberechtigung erteilt.

1
Fatih Çelik

Ich habe dieses Problem auch mit dem WCF-Beispiel Microsoft.ServiceModel.Samples.Calculator versucht. Ich verwende IIS 5.1. Ich habe das Problem gelöst, indem ich sicherstellte, dass die automatisch generierte Website (Dienstmodellbeispiele) keine Anwendung war. Klicken Sie mit der rechten Maustaste auf den Ordner, klicken Sie auf "Eigenschaften" und klicken Sie auf die Schaltfläche "Erstellen".

1
amgray789

In meinem Fall klicken Sie mit der rechten Maustaste auf Virtuelles Verzeichnis und wählen Sie "In Anwendung konvertieren".

1
Atul K.

Zwei Schlüssel dazu für bestimmte Varianten des Attributs "Service-Attribut in der ServiceHost-Direktive konnten nicht gefunden werden" -Problem: (1) Wenn Sie mit Silverlight arbeiten, sollten Sie den Silverlight WCF-Enabled Service verwenden, nicht den nicht Silverlight-WCF-Service; Dadurch wird Web.Config für die Bindungen aktualisiert und der Typ wird sichtbar. (2) Passen Sie den Klassennamen im neuen Dienst an den Dienstnamen an. Das Ziel ist hier, ein WSDL zu erstellen, damit Sie wissen, dass die Funktionalität des Dienstes für Ihren Silverlight-Client und das Web verfügbar ist. Es ist hilfreich, wenn der Dienst der Klasse entspricht. Wenn Sie die Namen gummiert bekommen, müssen Sie die Web.Config an drei Stellen bearbeiten (serviceBehaviors, Services und Bindings).

Es gab so viele aufrichtige Versuche, Leuten mit diesem Problem zu helfen, die für mich nicht hilfreich waren, und es sollte betont werden, dass sich dieses Dokument auf eine Silverlight-Lösung bezieht und möglicherweise nicht für jemanden gilt, der Silverlight 3 in einer Client/Web-Konfiguration nicht verwendet .

Ich hoffe es hilft.

1
kgoldfisher

Ich hatte das gleiche Problem, aber keine Ahnung, was es verursacht hat. Ich habe es gelöst, indem ich von Debug zu Release wechseln und mit Debug/Neue Instanz starten startete. Danach lief es sowohl in Release als auch in Debug. Es war magisch ...

1
Clayton
  1. Stellen Sie sicher, dass die Markup-Datei (svc) ein Service-Attribut mit namespace.classname hat, und codebehind wird classname.svc.cs sein

  2. Erstellen Sie die Lösung neu 

  3. Starten Sie die App-Pools einmal von local IIS aus neu.

0
Nitin

Ich habe diese Fehlermeldung erhalten, als ich versuche, die Servicereferenz für das erste WCF mit Silverlight-Funktion in derselben Lösung hinzuzufügen. Ich baue gerade das .Web-Projekt und es fing an zu arbeiten ..

0
AnoojNair

Das Erstellen der Lösung vor dem Hinzufügen der Servicereferenz löste mein Problem.

0
Ratan

Ich hatte das gleiche Problem, fand diesen Thread, versuchte alles außer Nogo.

Dann verbringe ich weitere 4 Stunden verschwendete Zeit.

Dann stellte ich fest, dass sich die Kompilierungseinstellungen von 64 Bit auf x86 geändert hatten. Als ich es wieder auf 64Bits änderte, funktionierte es. Ich weiß nicht genau warum, aber es könnte sein, dass der Anwendungspool IIS nicht auf 32-Bit-Anwendungen eingestellt wurde.

0
edelwater

Fügen Sie in Ihrem Dienst eine Referenz des Dienstes hinzu oder kopieren Sie die DLL.

0
JDP