WCF REST 404 при попытке получить - PullRequest
3 голосов
/ 23 декабря 2011

Я продолжаю получать 404 на очень простом сервисе WCF, который я хочу показать через REST - я пытаюсь получить к нему доступ, перейдя по этому URL при отладке http://localhost:62888/Service1.svc/xml/data/test

Я могу просмотреть информацию об услуге на http://localhost:62888/Service1.svc, но не на http://localhost:62888/Service1.svc/xml

Я использую .Net 4 и проект приложения-службы WCF. Я попробовал отладку с Cassini, а также IIS Express

Web.Config

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="Service1">
        <!-- address is relative-->
        <endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="webHttp" contract="IService1" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp />         <!-- enables RESTful in conjunction with webHttpBinging -->
          <enableWebScript /> <!-- allows ajax communication -->
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

IService.cs

using System.ServiceModel;
using System.ServiceModel.Web;

namespace CI.WcfRestTest
{
    public interface IService1
    {
        [OperationContract]
        [WebGet(UriTemplate = "/data/{id}")]
        string GetData(string id);
    }
}

Service1.svc.cs

namespace CI.WcfRestTest
{
    public class Service1 : IService1
    {
        public string GetData(string id)
        {
            return string.Format("You entered: {0}", id);
        }
    }
}

Я прочитал несколько статей на эту тему, включая эту Конечные точки REST / SOAP для службы WCF . Возможно, что-то есть в Cassini или в моей машинной конфигурации, что обескураживает? Я читал о проблемах с Windows Vista, но я на Windows 7 Pro. Возможно, это как-то связано с приложением службы WCF, а не с библиотекой службы WCF?

1 Ответ

3 голосов
/ 23 декабря 2011

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

В настоящее время у вас есть:

<services>
  <service name="Service1">

НО: это должно быть полное имя имени службы - включая любые пространства имен!

Так что попробуйте это вместо:

 <services>
    <service name="CI.WcfRestTest.Service1">
       <!-- address is relative-->
       <endpoint address="xml" 
                 binding="webHttpBinding" behaviorConfiguration="webHttp" 
                 contract="CI.WcfRestTest.IService1" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
</services>

Просто замените Service1 на CI.WcfRestTest.Service1 (и то же самое дляконтракт).Это решает вашу проблему ??

...