Проблема с типом сервиса в директиве ServiceHost в сервисе wcf - PullRequest
37 голосов
/ 12 марта 2011

Я разрабатываю простой сервис wcf для тестирования. Когда я тестирую этот сервис с локальным IIS 7.5, он работает правильно. Но когда я размещаю его в веб-IIS, я получаю эту ошибку:

Тип 'WcfServiceLibrary1.Service1', предоставляется в качестве атрибута службы значение в директиве ServiceHost, или предусмотрено в элементе конфигурации system.serviceModel / serviceHostingEnvironment / serviceActivations не может быть найден.

И мой ServiceHost:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %>

Пожалуйста, помогите мне решить эту проблему

Ответы [ 18 ]

39 голосов
/ 18 декабря 2012

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

У меня возникла эта проблема, когда я вручную изменил пространство имен в файле MyService.svc.cs, и не изменил имя службы в соответствующем файле MyService.svc - оказалось, что это должно быть Service = "namespace.classname".

20 голосов
/ 12 марта 2011

Попробуйте использовать имя типа, указанного в сборке.

Это [Fully Qualified Type Name], [Assembly]

Где [Fully Qualified Type Name], в наиболее распространенных случаях YourNamespace.YourType

И [Assembly] в большинстве случаев YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Это становится более сложным, чем это (универсальные типы, вложенные типы и т. Д.), Но вряд ли будет так в вашем случае.

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

<%@ ServiceHost Language="C#" Debug="true" 
   Service="WcfServiceLibrary1.Service1, 
            WcfServiceLibrary1, 
            Version=1.0.0.0, 
            Culture=neutral, 
            PublicKeyToken=null" %>

Хотя вы, вероятно, захотите избавиться от перевода строки там.

Также убедитесь, что ваша dll действительно развернута

8 голосов
/ 20 сентября 2013

IIS по умолчанию ожидает увидеть файл svc в виртуальном каталоге и двоичные файлы внутри папки bin (как прокомментировал marc_s).

Однако конфигурация сборки по умолчанию для проектов библиотеки WCF - это сборка внутриПапка bin / Debug (или bin / Release).Вы можете изменить «Выходной путь» на «bin /» на вкладке «Build» свойств проекта.

Изменение этого исправило эту ошибку для меня сегодня.

8 голосов
/ 12 сентября 2012

У меня была такая же проблема только при публикации моего сервиса, но он работал локально.

Оказалось, что служба ссылалась на DLL, которая не была развернута. Это супер особый случай, потому что это был системный dll (System.Web.Helpers), и поэтому у проекта даже не было ссылки на него, и, следовательно, для параметра «Копировать локальный» не было установлено значение true.

4 голосов
/ 13 марта 2011

Наконец, моя проблема решена.

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

Теперь я могу просмотреть файл .svc для сервиса, и мой клиент будет использовать сервис.

Я не понимаю, почему этопроблема произошла!Я немного растерялся!

4 голосов
/ 10 марта 2013

У меня возникла такая же проблема после развертывания работающей службы в новом месте (новом сайте) в IIS.В inetmgr в дереве веб-сайтов по умолчанию я не щелкнул правой кнопкой мыши новый сайт и выбрал «Преобразовать в приложение» - все работает сейчас!

3 голосов
/ 24 декабря 2012

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

Я обнаружил, указывал ли я приложение IIS на моей машине разработки на фактический каталог проекта, в котором находятся папки web.config, MyService.svc и bin, необходимые для приложения-службы WCF, оно просто не будет работать, и бросал эту ошибку. Это несмотря на четырехкратную проверку каждого параметра и обеспечение того, чтобы все было эквивалентно другим простым работающим приложениям WCF.

В конечном счете, я решил проблему, опубликовав ее в другом каталоге, а не в зависимости от файлов проекта и самих каталогов.

Возможно, это потому, что файлы были открыты в Visual Studio, когда я пытался запустить приложение WCF через IIS? Я не знаю, но Visual Studio предоставил localhost: 59871 / ... работал. Я не знаю, использует ли этот экземпляр файлы проекта или временно опубликованную версию.

2 голосов
/ 04 августа 2016

Проверьте правильность пространства имен и класса, записанных в «Service» для «SeviceHost». Это должно быть Service="namespace.classname".

1 голос
/ 05 февраля 2013

Поскольку я не могу голосовать до @jeromeyers, я хочу добавить, что это решение, которое я нашел для этой проблемы.

Кто-то скопировал и вставил файл svc и связанные с ним файлы контрактов и кодов в новый проект, но нигде не обновлял пространства имен и имена классов. Очень расстраивает отслеживание, как это началось с этой ошибки:

"имя было запущено с недопустимым символом. Ошибка при обработке ресурса 'file: /// C: /...

<% @ServiceHost "</p>

при попытке щелкнуть правой кнопкой мыши файл .svc и выполнить «Просмотр в браузере».

1 голос
/ 13 февраля 2014

была эта проблема при запуске тестового проекта, который был встроен в мое решение.

Мне пришлось просмотреть в браузере, затем скопировать эту ссылку в новую ссылку на службу (удалить старую), а затем вставить ее вместо использования кнопки поиска утилиты в ссылке на службу.

...