2009-05-08 4 views
0

У меня есть тестовый проект, WCF Service Library, и я опубликовал проект. Имейте сервер 2003 с правильной установкой. Я перехожу к своему приложению и, щелкнув по .svc, получаю эту ошибку.Развертывание службы WCF, C#, WCF, VS2008

Тип «SearchService», предоставляемый как значение атрибута Service в директиве ServiceHost, не может быть найден.

Это отрывок из моего web.config

<endpoint address="" binding="wsHttpBinding" contract="TestService.ISearchService"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 

Мой Интерфейс:

[ServiceContract] 
public interface ISearchService 
{ 
    [OperationContract] 
    string GetName(); 
} 

Моя реализация:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)] 
public class SearchService :ISearchService 
{ 
    #region ISearchService Members 

    public string GetName() 
    { 
     returnn "HAL-2001" 
    } 

} 
+0

Давайте посмотрим класс обслуживания. –

ответ

0

Что звонит ваш клиентский код? Для этого нужно вызвать класс прокси, как показано ниже.

class SearchServiceProxy : ClientBase<ISearchService>, ISearchService 
{ 
    public string GetName() 
    { 
     return Channel.GetName(); 
    } 
} 
+0

Антонио, Я не добрался до клиента. Я просматривал с помощью IIS и на веб-странице, я нажал на файл .svc, и именно тогда я получил ошибку. Я предполагаю, что это может быть проблемой при моем развертывании, и это поможет мне с – 2009-05-08 16:45:06

2

Ну, WsHttpBinding требует, чтобы подключиться к службе с помощью SOAP - веб-браузер в одиночку не будет сократить его, так вот почему он не работает при просмотре в SVC-файл. На самом деле ничего плохого.

Вам необходимо создать полноценного полноценного клиента SOAP для подключения к вашему сервису и его проверки. Кроме того, вы также можете использовать тестовый клиент WcfTestClient.exe, который находится в папке VS2008\Common7\IDE.

Марк

+0

marc_s: Спасибо, я смог просмотреть его с помощью приложения WcfTestClient. При вызове моего метода: я получил это: «Звонящий не был аутентифицирован службой». ошибка – 2009-05-08 17:58:00

+0

Есть ли конкретная причина, по которой вы используете «PerSession»? Самый простой способ - не указывать ничего и использовать экземпляры «PerCall». Кроме того, эта проблема аутентификации может возникнуть из конфигурации вашего сервера для службы - вам нужно показать нам все, что нам нужно, чтобы определить, что не так. –

1

AnO, вы должны переключиться на BasicHttpBinding и тест, чтобы убедиться, что все работает. Вы используете WSHttpBinding, и по умолчанию он включает аутентификацию. Вам нужно будет передать учетные данные для получения ответа, поэтому вызов браузера не работает.

2

ANo, ошибка указывает, что хост не смог найти определение для реализации службы «SearchService» в вашем web.config. В файле web.config вам необходимо обернуть тег < endpoint> в теге службы <. Атрибут name службы <> должен быть установлен на полное имя вашего класса SearchService (включая все пространства имен). Вам также необходимо определить поведение, чтобы служба отображала WSDL в браузере. Вы также можете удалить < dns value = "localhost" /> при развертывании службы на сервере.

Ниже приведен пример фрагмент кода, убедитесь, что ваш поставить полное имя класса из SearchService в < службы> тегов, а также убедитесь, что полное имя класса в вашем SVC-файле:

<system.serviceModel> 
<services> 
    <service name="SearchService" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="" binding="wsHttpBinding" contract="TestService.ISearchService"> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpGetEnabled="true"/> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> </system.serviceModel> 
Смежные вопросы