none
Consumir um WCF Restful em uma aplicaçao regular .net RRS feed

  • Pergunta

  • Bom dia,

    Seguindo um Tutorial eu criei um Wcf para ser consumido por uma aplicaçao android usando o padrao Json/RestFul,

    agora eu gostaria de usar esse serviço em um web site .aspx

    porem quando adiciono as referencias do serviço, este nao cria os behaviors, endpoint ou bindings

    e apos eu coloca-los manualmente no web.config

    recebo o erro de que "Nao havia ponto de extremidade no meu servico"

     

    web.config do meu serviço

    <?xml version="1.0"?>
    <configuration>
      <connectionStrings>
        
      </connectionStrings>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
        <bindings>
          <webHttpBinding>
            <binding name="big_webHttpBinding" maxReceivedMessageSize="4097152" maxBufferSize="4097152" maxBufferPoolSize="4097152">
              <readerQuotas maxStringContentLength="4097152" maxArrayLength="4097152" maxBytesPerRead="4097152" maxNameTableCharCount="4097152" maxDepth="4097152"/>
            </binding>
          </webHttpBinding>
        </bindings>
        <behaviors>
          <endpointBehaviors>
            <behavior name="httpBehavior">
              <webHttp />
            </behavior>
          </endpointBehaviors>
          <serviceBehaviors>
            <behavior>
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <services>
          <service name="ListaTarefa.WCF.Tarefa">
            <endpoint address=""
                         behaviorConfiguration="httpBehavior"
                         binding="webHttpBinding"
                         contract="ListaTarefa.WCF.ITarefa" />
          </service>
        </services>
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
    </configuration>
    

    Interface do serviço

      [OperationContract]
            [WebGet(
               UriTemplate = "GetFabrica/{ID_Fabrica}",
               BodyStyle = WebMessageBodyStyle.WrappedRequest,
               ResponseFormat = WebMessageFormat.Json,
               RequestFormat = WebMessageFormat.Json)]
            IList<CD_Fabrica> ConsultarFabrica(string ID_Fabrica);
    

    Alguem poderia me dar uma ajuda nesse aspecto?

     

    segunda-feira, 31 de outubro de 2011 14:42

Respostas

  • Boa tarde plcart,

    você não pode adicionar uma referência a partir de um serviço REST, como faria utilizando SOAP. Quando você utiliza SOAP seu serviço expõe Metadata (WSDL ou MEX) que serve exatamente para dizer ao cliente como ele deve gerar a referência para consumir seu serviço.

    Sugiro que você crie um novo endpoint utilizando SOAP para consumir o serviço em sua aplicação .NET. Vale lembrar que você pode expor os mesmos métodos em mais de um endpoint.

    Abraços,


    Daniel Cheida de Oliveira
    • Sugerido como Resposta Daniel Cheida segunda-feira, 31 de outubro de 2011 16:10
    • Marcado como Resposta plcart segunda-feira, 31 de outubro de 2011 17:08
    segunda-feira, 31 de outubro de 2011 16:09

Todas as Respostas

  • Boa tarde plcart,

    você não pode adicionar uma referência a partir de um serviço REST, como faria utilizando SOAP. Quando você utiliza SOAP seu serviço expõe Metadata (WSDL ou MEX) que serve exatamente para dizer ao cliente como ele deve gerar a referência para consumir seu serviço.

    Sugiro que você crie um novo endpoint utilizando SOAP para consumir o serviço em sua aplicação .NET. Vale lembrar que você pode expor os mesmos métodos em mais de um endpoint.

    Abraços,


    Daniel Cheida de Oliveira
    • Sugerido como Resposta Daniel Cheida segunda-feira, 31 de outubro de 2011 16:10
    • Marcado como Resposta plcart segunda-feira, 31 de outubro de 2011 17:08
    segunda-feira, 31 de outubro de 2011 16:09
  • Após pesquisa percebi que a forma de se trabalhar com serviços Rest é diferente até mesmo no aspx

    a minha soluçao foi a seguinte:

    nao precisei alterar em nada meu serviço

    WebClient objClient = new WebClient();
    XmlDocument xmlResponse = new XmlDocument();
    XmlDictionaryReader xmlReader = JsonReaderWriterFactory.CreateJsonReader(objClient.OpenRead("http://192.168.1.245/ListaTarefa.WCF/Tarefa.svc/GetFabrica/0"), XmlDictionaryReaderQuotas.Max);
    xmlReader.Read();
    xmlResponse.LoadXml(xmlReader.ReadOuterXml());
    XDocument xdocResult = Document.Parse(xmlResponse.OuterXml);
    List<CD_Fabrica> lstFabrica = (from f in xdocResult.Root.Elements()
                                                   select new
                                                   CD_Fabrica
                                                   {
                                                       DE_Fabrica = f.Element("DE_Fabrica").Value,
                                                       ID_Fabrica = f.Element("ID_Fabrica").Value
                                                   }).ToList();
    


    segunda-feira, 31 de outubro de 2011 16:37
  • Boas,

    Você pode recorrer ao WCF REST Starter Kit (http://www.israelaece.com/post/WCF-REST-Starter-Kit.aspx) enquanto o WCF Web API não está disponível.


    http://www.israelaece.com
    quarta-feira, 16 de novembro de 2011 00:52
    Moderador