WCF, значение атрибута сервиса в директиве ServiceHost не найдено

Я пытаюсь разместить мою службу с помощью IIS 6, но я получаю это исключение.

    Server Error in '/WebServices' Application.
--------------------------------------------------------------------------------

The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.]
   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +6714599
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +604
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +46
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +654

[ServiceActivationException: The service '/WebServices/dm/RecipientService.svc' cannot be activated due to an exception during compilation.  The exception message is: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found..]
   System.ServiceModel.AsyncResult.End(IAsyncResult result) +15626880
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15546921
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 

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

Вот мой .svc файл:

<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>

Я попытался создать очень простую службу, содержащую просто nothin, также посмотреть, будет ли это работать, но при этом появляется одна и та же старая ошибка.

The type 'IISHost.Service1', provided as the Service attribute value in the ServiceHost directive could not be found. 

Ответ 1

Вариант 1:

Это сообщение часто связано с проблемой конфигурации IIS 7. Если вы используете создание виртуального каталога, указывающего на папку, в которой находится ваша служба, это больше не работает. Теперь вам нужно использовать опцию "Создать приложение...".

Другие параметры:

Ответ 2

Проблема также может быть в другом пространстве имен в файле svc, как и в файле svc.cs.

В пространстве имен svc файл должен быть в следующем формате.

Service="Namespace.SvcClassName"

Ответ 3

Я знаю, что это, вероятно, "очевидный" ответ, но он немного сработал. Убедитесь, что в папке bin есть проект dll. Когда служба была опубликована, парень, опубликовавший ее, удалил dll, потому что думал, что они находятся в GAC. Тот, который специально для проекта (QS.DialogManager.Communication.IISHost.RecipientService.dll, в этом случае) не был там.

Такая же ошибка для ОЧЕНЬ другой причины.

Ответ 4

Эта ошибка возникает из-за несоответствия имени службы в файле .SVC. Возможно, вы, возможно, изменили имя класса службы, реализующего интерфейс. Решение состоит в том, чтобы открыть файл .SVC и точно соответствовать атрибуту Service и атрибуту CodeBehind. Поэтому ваш файл .SVC должен выглядеть как

<%@ ServiceHost Language="Language you are using" Debug="bool value to enable debugging" Service="Service class name that is implementing your Service interface" Codebehind="~/Appcode/Class implementing interface.cs"%>. for eg.

<%@ ServiceHost Language="C#" Debug="true" Service="Product.Service" CodeBehind=~/AppCode/Product.Service.cs"%>

В этом примере для файла .svc, использующего язык С#, с включенной отладкой, интерфейс реализации класса обслуживания и этот класс находится в папке приложения с именем Service.cs, а Product - пространство имен для класса Service.

Также выполните соответствующие изменения в конфигурационном файле службы.

 <system.serviceModel>
    <services>
    <service name="Product.Service" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="Product.Iservice">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
    </services>
    <behaviors>
    <behavior name="ServiceBehavior">
    <serviceMetaData httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
    </behaviors>
    </system.serviceModel>

Ответ 5

Дважды проверьте, что вы ссылаетесь на правильный тип из директивы ServiceHost в файле .svc. Вот как...

  • В проекте VS, содержащем вашу веб-службу, откройте файл .svc в редакторе XML (щелкните правой кнопкой мыши файл, "Открыть с...", выберите "Редактор XML (текст)", "ОК" ).
  • Обратите внимание на значение атрибута "Сервис".
  • Убедитесь, что он совпадает с полным типом имени вашего сервиса. Сюда входит имя пространства имен+. Например, если пространство имен является "MyCompany.Department.Services", а класс называется "MyService", тогда значение атрибута службы должно быть "MyCompany.Department.Services.MyService".

Ответ 6

У меня было такое же исключение, это связано с тем, что тип не указан правильно в файле .svc

Я исправил исправление ниже.

если ваш .svc.cs имеет класс, подобный этому

namespace Azh.Services.MyApp
{
    public class WcfApp : FI.IWcfAppService
{
...
}
}

для этого файл .svc должен выглядеть следующим образом:

<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>

Ответ 7

Вы должны настроить путь к папке bin для обслуживания локального bin.

Ответ 8

Я практически решил ту же проблему. Вот мое предложение. Ошибка означает, что объект, на который ссылается атрибут Service, не найден. Для того, чтобы объект был найден, приложение или библиотека должны создавать выходные данные в папке bin.

Вы можете отредактировать страницу свойств приложения и указать путь вывода к "bin".

Ответ 9

Если вы переименовали что-либо, проверьте правильность (Properties/) AssemblyInfo.cs, а также заголовок в файле службы.

ServiceName.svc

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>

Согласование с вашим пространством имен в Service.svc.cs

Ответ 10

Два ключа к этому для определенных атрибутов значения атрибута "Сервис" в директиве ServiceHost не могут быть найдены "- проблема: (1) Если вы работаете в Silverlight, вы должны использовать Silverlight WCF-Enabled Service, а не служба Silverlight WCF; это обновит Web.Config для привязок и позволит типу быть видимым; (2) Сопоставьте имя класса в новой службе с именем службы - целью здесь является создание wsdl... так, чтобы вы знали, что функциональность сервиса предоставляется вашему клиенту Silverlight и в Интернете; это помогает обеспечить соответствие сервиса классу. Если вы получите имена gummed вверх, вам придется отредактировать Web.Config в 3-х местах (serviceBehaviors, сервисы и привязки).

Было так много искренних попыток помочь людям с этой проблемой, которые мне не помогли, что следует подчеркнуть, что эта запись предназначена для решения Silverlight и может не применяться для тех, кто не использует Silverlight 3 в клиенте/Веб-конфигурация.

Надеюсь, что это поможет.

Ответ 11

У меня была такая же проблема, но я не знал, что вызвало ее. Я решил это, перейдя с Debug на Release и Run, используя Debug/Start New Instance. После этого он работал как в Release, так и в Debug. Это было волшебство...

Ответ 12

У меня была эта проблема - мой тип сервиса был в GAC. Это будет работать, если я добавлю DLL, содержащую этот тип в папку bin, но, как и в GAC, это НЕ то, что я хотел. В конце концов я добавил это в web.config для службы

<system.web>
    <customErrors mode="RemoteOnly" />
    <compilation debug="true" targetFramework="4.0">
        <assemblies>
            <add assembly="[name in GAC], Version=[version in GAC], Culture=neutral, PublicKeyToken=[ac token]" />
        </assemblies>
    </compilation>
</system.web>

и он работал без каких-либо DLL файлов в папке bin.

Ответ 13

Я также столкнулся с этой проблемой, попробовав образец WCF Microsoft.ServiceModel.Samples.Calculator. Я использую IIS 5.1. Я разрешил его, убедившись, что веб-сайт, который был автоматически создан (servicemodelsamples), не был приложением. Щелкните правой кнопкой мыши папку, нажмите "Свойства" и нажмите кнопку "Создать".

Ответ 14

Это может показаться тривиальным, но стоит упомянуть: Вы должны построить службу (в Visual Studio) - тогда в DLL будет создана bin в подпапке.

Когда служба "развернута" на сервере - в этой папке bin должен быть этот DLL файл, иначе эта ошибка будет выбрана...

Ответ 15

У меня была служба dll в папке bin, в которой находился файл svc. Перемещение DLL в папку корневого bin решило проблему.

Ответ 16

В моем случае Right Click на Virtual Directory и выберите "Конвертировать в приложение"!

Ответ 17

Добавьте ссылку на службу в свою службу или скопируйте dll.

Ответ 18

Построение решения до добавления сервисной ссылки позволило решить мою проблему.

Ответ 19

Я получил эту ошибку при попытке добавить ссылку на службу для первого WCF с поддержкой Silverlight в том же решении. Я просто создаю проект .Web и начал работать.

Ответ 20

У меня была такая же проблема, я нашел эту тему, пробовал все, кроме nogo.

Затем я трачу еще 4 часа впустую.

Затем я обнаружил, что параметры компиляции изменились с 64 бит на x86. Когда я сменил его на 64 бит, он сработал. Не знаю точно, почему, но может быть, что пул приложений IIS не был настроен на разрешение 32-разрядных приложений.

Ответ 21

Сегодня я столкнулся с этой ошибкой, причина была; У пользователя IIS нет разрешения на доступ к папке приложения. Я дал разрешения на чтение в корневую папку приложения.