Простейший REST сервис не работает - PullRequest
1 голос
/ 25 июля 2011

Может кто-нибудь сказать мне, почему эта служба REST не работает?

namespace WCFRestExample
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class HelloWorld : IHelloWorld
    {
        [WebGet(UriTemplate="/", ResponseFormat=WebMessageFormat.Xml)]
        public string GetData()
        {
            return "HIIII";
        }
    }
}

namespace WCFRestExample
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IHelloWorld
    {
        [OperationContract]
        string GetData();
    }
}

Это мой web.config:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Я могу просматривать службу .svc и правильно получаю страницу, но при просмотре:

http://localhost:60503/HelloWorld.svc/GetData

Я получаю страницу 404. Кто-нибудь может сказать мне, что происходит и где я могу найти учебники для WCF REST? Это самая простая услуга, которую можно создать, и даже она не работает для меня.

Заранее спасибо:)

Ответы [ 4 ]

3 голосов
/ 25 июля 2011

Вы нигде не определяете, что это должна быть служба REST - у вас нет конечной точки в вашем web.config, которая использует webHttpBinding, и вы не указали в своем файле *.svc для использования WebServiceHostFactory.

Простейшим решением было бы исправить файл svc на:

<%@ ServiceHost Language="C#" Debug="true" 
      Service="WCFRestExample.HelloWorld" CodeBehind="HelloWorld.svc.cs"
       Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

Теперь ваш файл SVC определяет, что он хочет использовать WebServiceHost (хост, который понимает REST) ​​для размещения вашей службы ...

Ознакомьтесь с Введение в службы RESTful с WCF , чтобы познакомиться с услугами REST с WCF.

2 голосов
/ 25 июля 2011

Попробуйте изменить шаблон URI на:

[WebGet(UriTemplate="/GetData", ResponseFormat=WebMessageFormat.Xml)]

Обновление

Бит в шаблоне uri может быть любым, поэтому он может быть:

/GetMySuperComplicatedData 

и все еще сопоставляться с GetData ()

Для получения дополнительной информации читайте здесь: http://msdn.microsoft.com/en-us/library/bb675245.aspx

1 голос
/ 25 июля 2011

Это может быть одной из причин, по которой вы неправильно установили ServiceHostFactory

<%@ ServiceHost Language="C#"       
                Service="WCFRestExample.HelloWorld"  
                CodeBehind="HelloWorld.svc.cs"    
                Factory="System.ServiceModel.Activation.WebServiceHostFactory"
%>
1 голос
/ 25 июля 2011

попробуй http://localhost:60503/HelloWorld и покажи нам свой Global.asax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...