Ho creato un servizio Web in WCF che restituisce più di 54000 righe di dati con 10 dati in ogni riga. Ho usato il wsHttpBinding per la comunicazione. Il servizio funziona bene con meno dati (cioè 2000 righe) ma esplode quando si tenta di inviare un set di record di grandi dimensioni con oltre 50000 righe (~ 2 MB). Il messaggio di eccezione è uguale aTrasferimento di grandi quantità di dati nel servizio WCF
Si è verificato un errore durante la ricezione della risposta HTTP a
http://localhost:9002/MyService.svc
. Ciò potrebbe essere dovuto al binding dell'endpoint del servizio che non utilizza il protocollo HTTP. Ciò potrebbe anche essere dovuto a un contesto di richiesta HTTP interrotto dal server (probabilmente a causa dell'arresto del servizio). Vedi i log del server per maggiori dettagli.
Si prega di non dirmi di utilizzare l'impaginazione sul lato client - so che risolverà il problema. Ma ho bisogno dell'intera fetta di dati nel client-end.
mia configurazione del servizio sul server è come
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="MyWsHttpBinding" />
</wsHttpBinding>
</bindings>
<services>
<service name="AdminService">
<endpoint address="AdminSrv"
binding="wsHttpBinding"
contract="IAdminService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="/Bus/IRfotoWCF" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"></serviceHostingEnvironment>
</system.serviceModel>
La mia configurazione client è come
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IAdminService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/TestService/AdminService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAdminService"
contract="IAdminService" name="BasicHttpBinding_IAdminService" />
</client>
</system.serviceModel>
Qualcuno mi può aiutare con la configurazione di esata sia sul lato client e server. Anche se ho bisogno di cambiare il binding da wsHttpBinding a netTcpBinding - non ho alcun problema a farlo. Grazie in anticipo.
Non capisco. È davvero una buona soluzione, quando un servizio attende un altro servizio durante 5,20 minuti. Penso che qui sia la grande domanda sull'architettura, ma non riesco a trovare una soluzione. – Vladislav
Continuo a testare la velocità con il trasferimento di big data. Usando il metodo "Chunks" posso inviare 300.000 (!) Righe, salvarlo nel database entro 4.34 min senza alcuna modifica nelle configurazioni del mio servizio. Sono solo separati i miei dati per blocchi con 50 righe. – Vladislav
È necessario utilizzare il serializzatore Datacontract anziché XML. Questo è finora un lavoro di sostituzione manuale all'interno di reference.cs. – NickD