Развертывание службы WCF, C #, WCF, VS2008 - PullRequest
0 голосов
/ 08 мая 2009

У меня есть тестовый проект, сервисная библиотека WCF, и я опубликовал проект. Иметь сервер 2003 со всей правильной установкой. Я просматриваю свое приложение и, нажимая на .svc, получаю эту ошибку.

Тип '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" 
    }

 }

Ответы [ 4 ]

2 голосов
/ 12 мая 2009

ANo, ошибка указывает, что хост не смог найти определение для реализации службы "SearchService" в вашем файле web.config. В вашем web.config вам нужно обернуть тег в тег . Атрибут имени должен быть установлен на полное имя вашего класса SearchService (включая все пространства имен). Вам также необходимо определить поведение, позволяющее службе показывать WSDL в браузере. Вы также можете удалить при развертывании службы на сервере.

Вот пример фрагмента, убедитесь, что вы поместили полное имя класса 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>
2 голосов
/ 08 мая 2009

Что ж, wsHttpBinding требует, чтобы вы подключались к сервису с помощью SOAP - только веб-браузер его не обрежет, поэтому он не работает, когда вы просматриваете файл .svc. В этом нет ничего плохого.

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

Марк

1 голос
/ 09 мая 2009

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

0 голосов
/ 08 мая 2009

Как звонит ваш клиентский код? Чтобы это работало, он должен вызывать прокси-класс, как показано ниже.

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