Lorsque je clique avec le bouton droit de la souris sur Eval.svc
dans Visual Studio 2012 et l’affiche dans le navigateur, j’obtiens ce qui suit -
Le type 'EvalServiceLibary.Eval', fourni comme valeur d'attribut Service dans la directive ServiceHost, ou fourni dans l'élément de configuration system.serviceModel/serviceHostingEnvironment/serviceActivations est introuvable.
Lorsque j'exécute le service WCF à partir du client de test, tout fonctionne correctement.
Service d'évaluation:
[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
(contrat de service)
[ServiceContract]
public interface IEvalService
{
[OperationContract]
void SubmitEntry(Job job, JobDetail jobDetail, TimeLog timeLog, User user, EntryType entryType, JobPhase jobPhase);
}
Eval.svc
balisage:
<%@ 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>
Des idées pourquoi je reçois cette erreur? J'ai cherché sur Google et trouvé quelques pages, mais rien ne semble fonctionner.
Merci!
Il s'avère que le fichier Eval.svc.cs avait besoin que son espace de noms soit changé en EvalServiceLibary, plutôt qu'en EvalServiceSite.
Modifiez la ligne suivante dans votre fichier Eval.svc
à partir de:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
à:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
Assurez-vous que les fichiers binaires sont dans le sous-répertoire "bin" de votre fichier ".svc".
Face à ce problème précis. Le problème a été résolu lorsque j'ai modifié la balise Service = "Namespace.ServiceName" dans le balisage (cliquez avec le bouton droit de la souris sur xxxx.svc et sélectionnez Afficher le balisage dans visual studio) pour correspondre à l'espace de noms que j'ai utilisé pour mon fichier xxxx.svc.cs
Je viens juste de frapper ce problème moi-même, et ni ceci ni aucune des autres réponses sur le net n'ont résolu mon problème. Pour moi, c’était un cas étrange: le répertoire virtuel avait été créé sur une autre branche d’un autre serveur de contrôle de code source (nous avions en fait mis à niveau de TFS 2010 à 2013) et la solution s’était souvenue de sa correspondance.
Quoi qu'il en soit, j'ai cliqué à nouveau sur le bouton "Créer un répertoire virtuel" dans les propriétés du projet de service. Il m'a donné un message sur le mappage vers un dossier différent et j'aimerais le mettre à jour. J'ai cliqué sur oui, et cela a résolu le problème.
Lorsque vous créez une application IIS, seul le dossier /bin
ou /App_Code
se trouve dans le répertoire racine de l'application IIS. Souvenez-vous donc de mettre tout le code dans le répertoire racine /bin
ou /App_code
(voir http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis. aspx ).
Assurez-vous que le nom du service et le contrat contiennent le nom complet (par exemple, namespace.ClassName
), et que le nom du service et l'interface sont identiques à l'attribut name du tag de service et au contrat du noeud final dans web.config.
J'ai changé le chemin de sortie du service. il devrait se trouver dans le dossier bin
du projet de service. Une fois que j'ai remis le chemin de sortie à bin
, cela a fonctionné.
Cliquez avec le bouton droit sur le fichier .svc dans l'Explorateur de solutions, puis cliquez sur View Markup
.
<%@ ServiceHost Language="C#" Debug="true"
Service="MyService.**GetHistoryInfo**"
CodeBehind="GetHistoryInfo.svc.cs" %>
Mettez à jour la référence de service à laquelle vous faites référence.
J'ai eu le même problème. Assurez-vous d'inclure le nom de l'assembly dans la propriété Factory
dans votre fichier .svc
. Peut-être devrez-vous nettoyer le cache IIS si vous aviez renommé le nom de l’assemblée du projet.
J'ai aussi eu le même problème. À dessein, mon chemin de sortie de construction était "..\bin" et cela fonctionne pour moi lorsque je le configure comme "\ bin".
Vérifiez les versions des projets .net. Les projets qui se sont référencés avec des versions différentes .net posent des problèmes.
Dans mon cas, j’ai fait un "Convertir en application" dans le mauvais dossier sur iis . Mon application a été placée dans un sous-dossier où elle aurait dû se trouver.
J'ai eu cette erreur lorsque la configuration de génération actuelle dans Visual Studio était définie sur autre chose que Debug.