Usuário com melhor resposta
Consumindo WCF com Restful

Pergunta
-
Amigos, desenvolvi um serviço WCF com Rest. Publiquei ele no IIS e quando acesso o endereço do serviço, ele funciona perfeitamente, no entanto, quando faço o request, ele me apresenta um erro 404.
Durante o debug, ele funciona perfeitamente, retornando o XML conforme todos os UriTemplate desenvolvidos.
O endereço do meu serviço é http://localhost:1981/servico.svc
Ele deveria me retornar os dados dos clientes com a seguinte linha: http://localhost:1981/servico.svc/clientes
Alguém pode me ajudar?
Respostas
-
Boas Luiz,
Sim, mas não tem nada de muito especial:
<system.serviceModel> <services> <service name="Service" behaviorConfiguration="ServiceBehavior"> <endpoint address="" binding="webHttpBinding" contract="IService"> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
http://www.projetando.net- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:16
-
Olá Luiz,
Para usar o WCF no modo REST, você precisa adicionar o WebHttpBehavior ao endpoint, além de usar o webHttpBinding (em vez de wsHttpBinding):
<services> <service behaviorConfiguration="WCFClientes.Service1Behavior" name="clientesBaseClasses.Fachada"> <endpoint address="clientesBaseClasses.Fachada.svc" binding="webHttpBinding" contract="clientesBaseClasses.IFachada" behaviorConfiguration="RESTBehavior"> <identity> <dns value="localhost" /> </identity> </endpoint> <host> <baseAddresses> <add baseAddress="http://localhost:8731/Design_Time_Addresses/WCFClientes/Service1/" /> </baseAddresses> </host> </service> </services> <behaviors> <endpointBehaviors> <behavior name="RESTBehavior"> <webHttp /> </behavior> </endpointBehaviors> </behaviors> - Sugerido como Resposta Carlos Figueira domingo, 29 de março de 2009 05:06
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:16
Todas as Respostas
-
-
Defini duas UriTemplates:
Retorna todos os Clientes:
[WebGet(UriTemplate = "clientes", ResponseFormat = WebMessageFormat.Xml)]
Retorna uma quantidade limitada de Clientes:
[WebGet(UriTemplate = "{p_Quantidade}/clientes")]
Eu ainda defini uma para apresentar uma mensagem de erro:
[WebGet(UriTemplate = "")]
Arquivo web.config
<services>
<service behaviorConfiguration="WCFClientes.Service1Behavior"
name="clientesBaseClasses.Fachada">
<endpoint address="clientesBaseClasses.Fachada.svc"
binding="wsHttpBinding" contract="clientesBaseClasses.IFachada">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WCFClientes/Service1/" />
</baseAddresses>
</host>
</service>
</services>
-
Boas Luiz,
Você fala:
"Ele deveria me retornar os dados dos clientes com a seguinte linha: http://localhost:1981/servico.svc/clientes"
Se você tem uma UriTemplate somente com este valor, ela deveria retornar. Para simular, eu fiz o mesmo teste aqui:
[ServiceContract] public interface IService { [OperationContract] [WebGet(UriTemplate = "clientes", ResponseFormat = WebMessageFormat.Xml)] string[] RecuperarDados(); }
E, em seguida, publiqui no IIS e tudo resultou como era de se esperar. A Url para acessar foi: http://localhost/SrvTeste/Service.svc/clientes.
http://www.projetando.net -
-
Boas Luiz,
Sim, mas não tem nada de muito especial:
<system.serviceModel> <services> <service name="Service" behaviorConfiguration="ServiceBehavior"> <endpoint address="" binding="webHttpBinding" contract="IService"> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
http://www.projetando.net- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:16
-
Olá Luiz,
Para usar o WCF no modo REST, você precisa adicionar o WebHttpBehavior ao endpoint, além de usar o webHttpBinding (em vez de wsHttpBinding):
<services> <service behaviorConfiguration="WCFClientes.Service1Behavior" name="clientesBaseClasses.Fachada"> <endpoint address="clientesBaseClasses.Fachada.svc" binding="webHttpBinding" contract="clientesBaseClasses.IFachada" behaviorConfiguration="RESTBehavior"> <identity> <dns value="localhost" /> </identity> </endpoint> <host> <baseAddresses> <add baseAddress="http://localhost:8731/Design_Time_Addresses/WCFClientes/Service1/" /> </baseAddresses> </host> </service> </services> <behaviors> <endpointBehaviors> <behavior name="RESTBehavior"> <webHttp /> </behavior> </endpointBehaviors> </behaviors> - Sugerido como Resposta Carlos Figueira domingo, 29 de março de 2009 05:06
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:16
-
Olá galera, pegando o bonde andando... Estou tendo problemas com meus serviços, e acabei lendo este post aqui.
Porém, me deparei com a primeira resposta do Carlos Figueira. E ele diz que é necessário adicionar algumas configurações no web.config porém eu não sei onde colocá-las, pois, meu arquivo não tem nenhuma entrada nem parecida com a demonstrada aqui. Alguém pode me dar uma luz?
Dêem uma olhada:
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> </sectionGroup> </sectionGroup> </sectionGroup> </configSections> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true"> <assemblies> <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation> <authentication mode="Windows"/> <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </controls> </pages> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> </httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules> </system.web> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <providerOption name="CompilerVersion" value="v3.5"/> <providerOption name="WarnAsError" value="false"/> </compiler> </compilers> </system.codedom> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules> <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </modules> <handlers> <remove name="WebServiceHandlerFactory-Integrated"/> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </handlers> </system.webServer> </configuration>
Eu sei que isso tá muito grande, mas, se puderem me ajudar... É pro meu TCC... Ajudem um pobre mortal...
:'(
Vlwzz... Abrazzzz
- Editado Rafael Orsini Fernandes segunda-feira, 8 de novembro de 2010 02:35 Redução de espaços desnecessários entre as linhas do código XML.
-
Boas Rafael,
Vamos do começo: você quer criar um serviço REST ou ele já está criado e você está com dificuldades em consumir?!
http://www.israelaece.com