Ответ 1
Оказывается, что Eval.svc.cs потребовалось, чтобы его пространство имен было изменено на EvalServiceLibary, а не EvalServiceSite.
Когда я нажимаю на Eval.svc
в Visual Studio 2012 и просматриваю в браузере, я получаю следующее -
Тип "EvalServiceLibary.Eval", предоставляемый в качестве значения атрибута Service в директиве ServiceHost или предоставленный в элементе конфигурации system.serviceModel/serviceHostingEnvironment/serviceActivations, не может быть найден.
Когда я запускаю службу WCF из тестового клиента, все работает нормально.
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
(контракт на обслуживание)
[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>
Любые идеи, почему я получаю эту ошибку? Я искал Google и сталкивался с несколькими страницами, но ничего не работает.
Спасибо!
Оказывается, что Eval.svc.cs потребовалось, чтобы его пространство имен было изменено на EvalServiceLibary, а не EvalServiceSite.
Измените следующую строку в файле Eval.svc
на:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
to:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
Убедитесь, что двоичные файлы находятся под подкаталогом "bin" вашего файла ".svc"
Столкнулся с этой точной проблемой. Проблема была решена, когда я изменил тег Service = "Namespace.ServiceName" в разметке (щелкните правой кнопкой мыши xxxx.svc и выберите View Markup в visual studio), чтобы соответствовать пространству имен, которое я использовал для моего файла xxxx.svc.cs.
Я просто попал в эту проблему сам, и ни этот, ни какой-либо другой ответ в сети не решили мою проблему. Для меня это было странно, когда виртуальный каталог был создан на другой ветке на другом сервере управления версиями (в основном, мы обновили с TFS 2010 до 2013 года), и решение каким-то образом запомнило его сопоставление.
В любом случае, я снова нажал кнопку "Создать виртуальный каталог" в проекте "Свойства службы". Это дало мне сообщение о сопоставлении с другой папкой, и я хотел бы обновить его. Я нажал кнопку "Да", и это устранило проблему.
1. Когда вы создаете приложение IIS, единственная папка /bin или/App_Code находится в корневой папке приложения IIS. Просто запомните, чтобы поместить весь код в каталог root/bin или /App _code.
http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis.aspx
2 Убедитесь, что имя службы и контракт содержат полное имя (например, namespace.ClassName), а имя и интерфейс службы такие же, как атрибут имени тега службы и контракт конечной точки в web.config.
Я изменил путь вывода службы. он должен находиться внутри папки bin
проекта службы. После того как я вернул выходной путь на bin
, он сработал.
Щелкните правой кнопкой мыши файл .svc в обозревателе решений и нажмите View Markup
<%@ ServiceHost Language="C#" Debug="true"
Service="MyService.**GetHistoryInfo**"
CodeBehind="GetHistoryInfo.svc.cs" %>
Обновите ссылку на службу, в которой вы ссылаетесь.
Дважды проверьте проекты .net. Проекты, которые ссылаются друг на друга с разными версиями .net, вызывают проблемы.
В моем случае я сделал "Преобразовать в приложение" в неправильную папку на iis. Мое приложение было установлено во вложенной папке, где должно было быть.
У меня была эта ошибка, когда у меня была текущая конфигурация сборки в Visual Studio для чего-то другого, кроме Debug.
У меня также была такая же проблема. Целесообразно, чтобы мой путь вывода сборки был "..\bin", и он работает для меня, когда я устанавливаю путь вывода сборки как "\ bin".
Это старая ошибка, но я столкнулся с ней сегодня на веб-сервисе, который едва изменился с момента создания через "New\Project.."
Для меня эта проблема была вызвана файлом "IService.cs
", содержащим следующее:
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1.svc" CodeBehind="Service1.svc.cs" %>
Обратите внимание, что значение в атрибуте Service
содержит ".svc
" в конце.
Этого не должно быть.
Удаление этих 4 символов разрешило эту проблему.
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1" CodeBehind="Service1.svc.cs" %>
Обратите внимание, что вам нужно открыть этот файл вне Visual Studio.
Visual Studio показывает один файл Service1.cs
в обозревателе решений, но это позволяет вам изменять Service1.svc.cs
, а не файл Service1.svc
.