it-roy-ru.com

WCF, значение атрибута Service в директиве 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" %>

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

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

Вариант первый:

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

Другие опции:

60
Konstantin Tarkus

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

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

Service="Namespace.SvcClassName"
68
Peter Stegnar

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

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

30
baileyrt

Эта ошибка возникает из-за несоответствия имени службы в файле .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>
11
Chandra Malla

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

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

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

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

4
Kishor

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

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

2
Dayakumar

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

ServiceName.svc

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

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

2
lko

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

1
Mikayil Abdullayev

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

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

1
Yuval A.

У меня была эта проблема - мой тип обслуживания был в 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.

1
Jason9364

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

1
Fatih Çelik

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

1
amgray789

В моем случае щелкнул правой кнопкой мыши по виртуальному каталогу и выбрал «Преобразовать в приложение»!

1
Atul K.

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

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

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

1
kgoldfisher

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

1
Clayton
  1. Убедитесь, что файл разметки (SVC) имеет атрибут службы с namespace.classname и codebehind будет classname.svc.cs

  2. Восстановить решение 

  3. Перезапустите пулы приложений из локального IIS один раз.

0
Nitin

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

0
AnoojNair

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

0
Ratan

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

Тогда я провожу еще 4 часа потраченного времени.

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

0
edelwater

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

0
JDP