example - servicemodel c#
WCF Service, el tipo provisto como valores de atributo de servicio... no se pudo encontrar (13)
Cuando crea una aplicación IIS, solo la carpeta
/bin
o/App_Code
está en el directorio raíz de la aplicación IIS. Así que solo recuerde poner todo el código en el directorio raíz/bin
o/App_code
(vea http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis.aspx ).Asegúrese de que el nombre del servicio y el contrato contengan el nombre completo (por ejemplo,
namespace.ClassName
), y el nombre y la interfaz del servicio es el mismo que el atributo name de la etiqueta de servicio y el contrato de punto final en web.config.
Cuando hago clic derecho en Eval.svc
dentro de Visual Studio 2012 y lo veo en el navegador, obtengo lo siguiente:
No se pudo encontrar el tipo ''EvalServiceLibary.Eval'', proporcionado como el valor del atributo de servicio en la directiva ServiceHost, o proporcionado en el elemento de configuración system.serviceModel / serviceHostingEnvironment / serviceActivations.
Cuando ejecuto el servicio WCF desde el cliente de prueba, todo funciona bien.
Servicio de evaluación:
[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
(Contrato de servicio)
[ServiceContract]
public interface IEvalService
{
[OperationContract]
void SubmitEntry(Job job, JobDetail jobDetail, TimeLog timeLog, User user, EntryType entryType, JobPhase jobPhase);
}
Eval.svc
:
<%@ 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>
¿Alguna idea de por qué estoy recibiendo este error? He buscado en Google y he encontrado algunas páginas, pero parece que nada funciona.
¡Gracias!
Acabo de abordar este tema yo mismo, y ni esta ni ninguna de las otras respuestas en la red resolvieron mi problema. Para mí fue extraño que el directorio virtual se haya creado en una rama diferente en otro servidor de control de código fuente (básicamente, se actualizó de TFS 2010 a 2013) y la solución de alguna manera recordó su mapeo.
De todos modos, hice clic nuevamente en el botón "Crear directorio virtual" en las Propiedades del proyecto de servicio. Me dio un mensaje sobre el mapeo en una carpeta diferente y me gustaría actualizarlo. Hice clic en sí, y eso solucionó el problema.
Ante este problema exacto. El problema se resolvió cuando cambié la etiqueta Service = "Namespace.ServiceName" en Markup (haga clic derecho en xxxx.svc y seleccione View Markup en visual studio) para que coincida con el espacio de nombres que utilicé para mi archivo xxxx.svc.cs
Asegúrese de que los archivos binarios estén bajo el subdirectorio "bin" de su archivo ".svc"
Cambié la ruta de salida del servicio. debe estar dentro de la carpeta bin
del proyecto de servicio. Una vez que volví a poner la ruta de salida en la bin
, funcionó.
Cambie la siguiente línea en su archivo Eval.svc
desde:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
a:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
En mi caso, hice una "Convertir a la aplicación" a la carpeta incorrecta en iis. Mi aplicación se configuró en una subcarpeta de donde debería haber estado.
Este es un error antiguo, pero lo encontré hoy en un servicio web que apenas se ha modificado desde que se creó a través de "New / Project ...".
Para mí, este problema fue causado por el archivo " IService.cs
" que contiene lo siguiente:
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1.svc" CodeBehind="Service1.svc.cs" %>
Observe que el valor en el atributo de Service
contiene " .svc
" al final.
Esto no debería estar allí.
La eliminación de esos 4 caracteres resolvió este problema.
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1" CodeBehind="Service1.svc.cs" %>
Tenga en cuenta que debe abrir este archivo desde fuera de Visual Studio.
Visual Studio muestra un archivo, Service1.cs
en el Explorador de soluciones, pero eso solo le permite modificar Service1.svc.cs
, no el archivo Service1.svc
.
Haga clic con el botón derecho en el archivo .svc en el Explorador de soluciones y haga clic en View Markup
<%@ ServiceHost Language="C#" Debug="true"
Service="MyService.**GetHistoryInfo**"
CodeBehind="GetHistoryInfo.svc.cs" %>
Actualice la referencia del servicio a la que se refiere.
Resulta que el Eval.svc.cs necesitó cambiar su espacio de nombre a EvalServiceLibary, en lugar de EvalServiceSite.
También tuve el mismo problema. De hecho, mi ruta de salida de compilación fue ".. / bin" y me funciona cuando configuro la ruta de salida de compilación como "/ bin".
Tuve este error cuando tuve la configuración de compilación actual en Visual Studio configurada en otra cosa que no sea Debug.
Verifique las versiones de los proyectos .net. Los proyectos que hacen referencia entre sí con diferentes versiones de .net causan problemas.