Как использовать службу WCF с HTTP Get (в Visual Studio 2010) - PullRequest
1 голос
/ 25 ноября 2010

Мы пытались использовать очень очень простой сервис WCF с HTTp Get, и мы не можем заставить его работать. Мы следовали за этим «гидом», но он не работает

Когда мы вызываем наш сервис по следующему адресу, мы получаем сообщение об ошибке «страница не найдена»:

http://localhost:9999/Service1.svc/GetData/ABC

Базовый URL (http://localhost:9999/Service1.svc) работает нормально и возвращает страницу информации о сервисе wcf правильно.

Это шаги и код для воспроизведения нашего примера.

  1. В Visual Studio 2010 создайте новый проект "Приложение-служба WCF"
  2. Заменить интерфейс IService на этот код

      [ServiceContract()]
      public interface IService1
      {
          [OperationContract()]
          [WebInvoke(Method = "GET", 
                     BodyStyle = WebMessageBodyStyle.Bare, 
                     UriTemplate = "GetData/{value}")]
          string GetData(string value);
      }
    
  3. Заменить класс обслуживания на этот код

    public class Service1 : IService1
    {
        public string GetData(string value)
        {
            return string.Format("You entered: {0}", value);
        }
    }
    
  4. Web.config выглядит следующим образом

    <system.web>
       <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
      <services>
          <service name="Service1">
              <endpoint address="" binding="webHttpBinding" contract="IService1" behaviorConfiguration="WebBehavior1">
              </endpoint>
          </service>
      </services>
      <behaviors>
          <endpointBehaviors>
              <behavior name="WebBehavior1">
                 <webHttp helpEnabled="True"/>
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
    

  5. Нажмите Run и попробуйте вызвать метод Get

Если кто-то сработает с этим или чем-то похожим, было бы очень любезно, если бы вы ответили информацию о рабочем примере.

Большое спасибо

1 Ответ

1 голос
/ 25 ноября 2010

Я воссоздал ваш образец - работает как шарм.

Одно замечание: существует ли ваш контракт на обслуживание (public interface IService1) и реализация сервиса (public class Service1 : IService1) в пространстве имен .NET ??

Если это так, вам нужно изменить * .svc и web.config на:

<services>
      <service name="Namespace.Service1">
          <endpoint address="" binding="webHttpBinding" 
                    contract="Namespace.IService1" 
                    behaviorConfiguration="WebBehavior1">
          </endpoint>
      </service>
  </services>

Атрибут <service name="..."> и <endpoint contract="..."> должны включать пространство имен .NET, чтобыработа.

...