Подтвердить что ты не робот

Служба WCF, тип, указанный в качестве значений атрибута сервиса... не найден

Когда я нажимаю на 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 и сталкивался с несколькими страницами, но ничего не работает.

Спасибо!

4b9b3361

Ответ 1

Оказывается, что Eval.svc.cs потребовалось, чтобы его пространство имен было изменено на EvalServiceLibary, а не EvalServiceSite.

Ответ 2

Измените следующую строку в файле Eval.svc на:

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

to:

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

Ответ 3

Убедитесь, что двоичные файлы находятся под подкаталогом "bin" вашего файла ".svc"

Ответ 4

Столкнулся с этой точной проблемой. Проблема была решена, когда я изменил тег Service = "Namespace.ServiceName" в разметке (щелкните правой кнопкой мыши xxxx.svc и выберите View Markup в visual studio), чтобы соответствовать пространству имен, которое я использовал для моего файла xxxx.svc.cs.

Ответ 5

Я просто попал в эту проблему сам, и ни этот, ни какой-либо другой ответ в сети не решили мою проблему. Для меня это было странно, когда виртуальный каталог был создан на другой ветке на другом сервере управления версиями (в основном, мы обновили с TFS 2010 до 2013 года), и решение каким-то образом запомнило его сопоставление.

В любом случае, я снова нажал кнопку "Создать виртуальный каталог" в проекте "Свойства службы". Это дало мне сообщение о сопоставлении с другой папкой, и я хотел бы обновить его. Я нажал кнопку "Да", и это устранило проблему.

Ответ 6

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.

Ответ 7

Я изменил путь вывода службы. он должен находиться внутри папки bin проекта службы. После того как я вернул выходной путь на bin, он сработал.

Ответ 8

Щелкните правой кнопкой мыши файл .svc в обозревателе решений и нажмите View Markup

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

Обновите ссылку на службу, в которой вы ссылаетесь.

Ответ 9

Дважды проверьте проекты .net. Проекты, которые ссылаются друг на друга с разными версиями .net, вызывают проблемы.

Ответ 10

В моем случае я сделал "Преобразовать в приложение" в неправильную папку на iis. Мое приложение было установлено во вложенной папке, где должно было быть.

Ответ 11

У меня была эта ошибка, когда у меня была текущая конфигурация сборки в Visual Studio для чего-то другого, кроме Debug.

Ответ 12

У меня также была такая же проблема. Целесообразно, чтобы мой путь вывода сборки был "..\bin", и он работает для меня, когда я устанавливаю путь вывода сборки как "\ bin".

Ответ 13

Это старая ошибка, но я столкнулся с ней сегодня на веб-сервисе, который едва изменился с момента создания через "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.