webentwicklung-frage-antwort-db.com.de

WCF-Dienst, der als Dienstattributwerte bereitgestellte Typ… wurde nicht gefunden

Wenn ich in Visual Studio 2012 mit der rechten Maustaste auf Eval.svc klicke und im Browser sehe, erhalte ich Folgendes: 

Der Typ 'EvalServiceLibary.Eval', der als Service-Attributwert in der ServiceHost-Direktive angegeben ist oder im Konfigurationselement system.serviceModel/serviceHostingEnvironment/serviceActivations enthalten ist, wurde nicht gefunden.

Wenn ich den WCF-Dienst vom Testclient aus ausführe, funktioniert alles einwandfrei.

Eval Service:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class EvalService : IEvalService
{
    Dictionary<string, JobPhaseTimer> jobTimers = new Dictionary<string, JobPhaseTimer>();

    public void SubmitEntry(ENBO.Jobs.Job job, ENBO.Jobs.JobDetail jobDetail, ENBO.TimeLogs.TimeLog timeLog, ENBO.Users.User user, ENBO.Utilities.EntryType entryType, JobPhase jobPhase)
    {
        if (entryType == EntryType.Active)
        {
            JobPhaseTimer timer = new JobPhaseTimer();
            timer.UID = job.ID + "_" + jobPhase.ID;
            timer.JobID = job.ID;
            timer.JobDetailID = jobDetail.ID;
            timer.PhaseID = jobPhase.ID;
            timer.StartTime = DateTime.Now;
            timer.Stopwatch.Start();
            jobTimers.Add(timer.UID, timer);

            TimeLog log = new TimeLog();
            log.JobID = job.ID;
            log.PhaseID = jobPhase.ID;
            log.UserID = user.ID;
            log.DateEntry = DateTime.Now;
            log.EntryType = EntryType.Active;

            if (log.AddNewTimeLog())
            {
                //Do something
            }
        }
        else if (entryType == EntryType.Paused)
        {
            JobPhaseTimer timer = jobTimers[job.ID + "_" + jobPhase.ID];
            timer.Stopwatch.Stop();

            TimeLog log = new TimeLog();
            log.JobID = job.ID;
            log.PhaseID = jobPhase.ID;
            log.UserID = user.ID;
            log.DateEntry = DateTime.Now;
            log.EntryType = EntryType.Paused;

            if (log.AddNewTimeLog())
            {
                //Do something
            }
        }
    }
}

IEvalService.cs (Servicevertrag)

[ServiceContract]
public interface IEvalService
{
    [OperationContract]
    void SubmitEntry(Job job, JobDetail jobDetail, TimeLog timeLog, User user, EntryType entryType, JobPhase jobPhase);
}

Eval.svc Auszeichnung:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>

Web.config:

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="EvalServiceLibary.EvalService">
        <endpoint address="" behaviorConfiguration="" binding="webHttpBinding"
      contract="EvalServiceLibary.IEvalService" />
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
      contract="EvalServiceLibary.IEvalService" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="EvalServiceSite.EvalAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

Irgendwelche Ideen, warum ich diesen Fehler bekomme? Ich habe Google gesucht und bin auf ein paar Seiten gestoßen, aber nichts scheint zu funktionieren.

Vielen Dank!

25
dynamicuser

Es stellt sich heraus, dass für Eval.svc.cs der Namespace in EvalServiceLibary und nicht in EvalServiceSite geändert werden musste.

9
dynamicuser

Ändern Sie die folgende Zeile in Ihrer Eval.svc-Datei von: 

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %> 

zu: 

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
64
user3578181

Stellen Sie sicher, dass sich die Binärdateien im Unterverzeichnis "bin" Ihrer ".svc" -Datei befinden

31
vasek

Konfrontiert mit diesem Problem. Das Problem wurde behoben, als ich das Markierungsfeld "Service =" Namespace.ServiceName "im Markup änderte (klicken Sie mit der rechten Maustaste auf xxxx.svc und wählen Sie Markup in Visual Studio anzeigen), um den Namespace abzugleichen, den ich für meine xxxx.svc.cs-Datei verwendet habe

16
TheCopyPaster

Ich habe dieses Problem gerade selbst getroffen, und weder diese noch die anderen Antworten im Internet haben mein Problem gelöst. Für mich war es eine seltsame Frage, bei der das virtuelle Verzeichnis in einem anderen Zweig eines anderen Versionsverwaltungsservers in einem anderen Zweig erstellt wurde (im Wesentlichen haben wir ein Upgrade von TFS 2010 auf 2013 durchgeführt) und die Lösung erinnerte sich irgendwie an die Zuordnung.

Jedenfalls habe ich in den Eigenschaften des Service-Projekts erneut auf die Schaltfläche "Virtuelles Verzeichnis erstellen" geklickt. Es gab mir eine Nachricht, dass ich einem anderen Ordner zugeordnet wurde, und möchte ihn gerne aktualisieren. Ich habe auf Ja geklickt und das Problem behoben.

4
Detail
  1. Wenn Sie eine Anwendung IIS erstellen, befindet sich nur der Ordner /bin oder /App_Code im Stammverzeichnis der Anwendung IIS. Denken Sie also daran, den gesamten Code in das Stammverzeichnis /bin oder /App_code zu legen (siehe http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis. aspx ).

  2. Stellen Sie sicher, dass der Dienstname und der Vertrag den vollständigen Namen enthalten (z. B. namespace.ClassName), und dass Dienstname und Schnittstelle mit dem Namensattribut des Dienstetags und dem Vertrag des Endpunkts in web.config übereinstimmen.

Ich habe den Ausgabepfad des Dienstes geändert. Es sollte sich im bin-Ordner des Serviceprojekts befinden. Sobald ich den Ausgabepfad wieder auf bin gesetzt habe, hat es funktioniert.

2
Gokul

Klicken Sie mit der rechten Maustaste auf die .svc-Datei im Projektmappen-Explorer und klicken Sie auf View Markup.

 <%@ ServiceHost Language="C#" Debug="true" 
     Service="MyService.**GetHistoryInfo**" 
     CodeBehind="GetHistoryInfo.svc.cs" %>

Aktualisieren Sie die Servicereferenz, auf die Sie verweisen.

1
Joe

Ich hatte das gleiche Problem. Stellen Sie sicher, dass Sie den Assemblynamen in der Eigenschaft Factory in Ihrer .svc-Datei angeben. Möglicherweise müssen Sie den IIS - Cache leeren, wenn Sie den Namen der Projektassembly umbenannt haben.

1
Jalal

Ich hatte auch das gleiche Problem. Eigentlich war mein Build-Ausgabepfad "..\bin" und es funktioniert für mich, wenn ich den Build-Ausgabepfad als "\ bin" setze.

0
K.Kirivarnan

Überprüfen Sie die .net-Versionen von Projekten. Projekte, die sich auf unterschiedliche .net-Versionen bezogen haben, verursachen Probleme.

0
Mehmet

In meinem Fall habe ich ein "Convert to application" in den falschen Ordner auf iis ..__ erstellt. Meine Anwendung wurde in einem Unterordner abgelegt, in dem sie sich befinden sollte.

0
Navy Seal

Ich hatte diesen Fehler, als die aktuelle Build-Konfiguration in Visual Studio auf etwas anderes als Debug gesetzt wurde.

0
BineG