none
WCF com Silverlight e NetTcpBinding RRS feed

  • Pergunta

  • Bom dia, Pessoal.

    Tenho uma aplicação Silverlight que realiza consultas ao banco SQL Server. Em uma tabela tenho 1 milhão de cadastros, sendo que:

    - inicia com a letra A: 130.000

    - inicia com a letra B:  16.000

    - inicia com a letra C:  70.000

    Quando executo a consulta pela primeira vez, no caso a letra A, o retorno é mais rápido, as posteriores vão ficando cada vez mais lentas. A impressão que tenho é que o buffer vai acumulando dados.

    Alguém tem uma ideia de como resolver isto? 

    Para trabalhar com grandes quantidades de dados, como devo configurar as propriedades do protocolo NetTcpBinding no web.config?

    Obrigada

    Teles

    sexta-feira, 12 de abril de 2013 12:54

Todas as Respostas

  • Posta seu código pro pessoal dar uma olhada!

    Att, Felipo Gonçalves | Microsoft Contingent Staff

    quinta-feira, 18 de abril de 2013 12:39
    Moderador

  • Bom dia.

    Tenho dois servicos ambos usando o binding NetTcpBinding.

    ncServico.svc: Executa as operações CRUD. É este que estou chamando na consulta demorada. 

    ncServicoDuplex.svc: Usado para notificar os clientes em algumas situações.

    Segue arquivo Web.Config

    <?xml version="1.0"?>
    <configuration>
    
        <system.web>
          <compilation debug="true" targetFramework="4.0"/>
          <customErrors mode="Off"/>
        </system.web>
      <system.serviceModel>
        <client/>
        <extensions>
          <bindingExtensions>
            <add name="netTcpRelayBinding" type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
          </bindingExtensions>
        </extensions>
    
        <bindings>
          <netTcpBinding>
            <binding name="NetTcpBinding_IncServicoDuplex"  >
              <security mode="None"/>
            </binding>
          </netTcpBinding>
    
          <customBinding>
            <binding name="NetTcpBinding_IncServico" receiveTimeout="00:10:00" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00" >
              <binaryMessageEncoding maxSessionSize="1000000">
                <readerQuotas maxDepth="64" maxStringContentLength="131072" maxArrayLength="16384" maxBytesPerRead="16384" maxNameTableCharCount ="16384" />
              </binaryMessageEncoding>
              <tcpTransport portSharingEnabled="True" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
            </binding>
          </customBinding>
    
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true"/>          
              <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>          
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment  multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>
        <services>
    
          <service name="Nx.Web.ncServico">
            <endpoint address="net.tcp://localhost:4502/Nx.Web/ncServico.svc" binding="customBinding" bindingConfiguration="NetTcpBinding_IncServico" contract="Nx.Web.IncServico" />      
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
          </service>
    
          <service name="Nx.Web.ncServicoDuplex">
            <endpoint address="net.tcp://localhost:4502/Nx.Web/ncServicoDuplex.svc" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IncServicoDuplex" contract="Nx.Web.ncServicoDuplex" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
          </service>
    
        </services>
      </system.serviceModel>
      <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="All" propagateActivity="true">
            <listeners>         
              <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="C:\inetpub\log.svclog"/>
            </listeners>
          </source>
        </sources>
      </system.diagnostics>
    </configuration>
    


    Segue arquivo ServiceReferences.ClientConfig

    <configuration>
      <system.serviceModel>
        <bindings>
          <customBinding>
            <binding name="CustomBinding_IncServico">
              <binaryMessageEncoding />
              <tcpTransport maxReceivedMessageSize="2147483647"
                maxBufferSize="2147483647"  />
            </binding>
            <binding name="NetTcpBinding_ncServicoDuplex">
              <binaryMessageEncoding />
              <tcpTransport maxReceivedMessageSize="2147483647"
                maxBufferSize="2147483647"  />
            </binding>
          </customBinding>
        </bindings>
        <client>
          <endpoint address="net.tcp://192.168.0.53:4502/Nx.Web/ncServico.svc"
            binding="customBinding" bindingConfiguration="CustomBinding_IncServico"
            contract="ncServico.IncServico" name="CustomBinding_IncServico" />
          <endpoint address="net.tcp://192.168.0.53:4502/Nx.Web/ncServicoDuplex.svc"
            binding="customBinding" bindingConfiguration="NetTcpBinding_ncServicoDuplex"
            contract="ncServicoDuplex.ncServicoDuplex" name="NetTcpBinding_ncServicoDuplex" />
        </client>
      </system.serviceModel>
    </configuration>

    Como devo configurar os arquivos de configuração para:

    - Retornar grandes quantidades de dados;

    - Efetuar consultas simultâneas, ou seja, varias estações chamando o mesmo serviço sem degradar a perfomance do Sistema.

    Obrigada

    Teles

    segunda-feira, 22 de abril de 2013 12:57