WCF, значение атрибута Service в директиве ServiceHost не найдено - PullRequest
70 голосов
/ 06 апреля 2009

Я пытаюсь разместить свой сервис на 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" %>

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

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

Ответы [ 22 ]

69 голосов
/ 04 ноября 2009

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

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

Service="Namespace.SvcClassName"
64 голосов
/ 06 апреля 2009

Вариант один :

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

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

30 голосов
/ 16 января 2010

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

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

11 голосов
/ 07 апреля 2013

Эта ошибка возникает из-за несоответствия имени службы в файле .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, использующего язык C #, с включенной отладкой, интерфейсом реализации класса Service, и этот класс находится в папке приложения с именем 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>
9 голосов
/ 06 января 2011

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

  1. В проекте VS, содержащем ваш веб-сервис, откройте файл .svc в редакторе XML (щелкните файл правой кнопкой мыши, выберите «Открыть с помощью ...», выберите «Редактор XML (текст)», «ОК»).
  2. Обратите внимание на значение атрибута «Сервис».
  3. Убедитесь, что оно соответствует полному имени типа вашего сервиса. Это включает в себя пространство имен + имя типа. Например, если пространство имен «MyCompany.Department.Services», а класс называется «MyService», то значение атрибута Service должно быть «MyCompany.Department.Services.MyService».
7 голосов
/ 12 января 2011

У меня было то же исключение, это связано с тем, что тип неправильно указан в файле .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" %>
4 голосов
/ 01 марта 2010

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

2 голосов
/ 23 октября 2012

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

ServiceName.svc

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

Выравнивание с вашим пространством имен в вашем Service.svc.cs

2 голосов
/ 20 октября 2010

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

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

1 голос
/ 12 октября 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...