» »

[WCF] Pošiljanje slike večje od 20KB

[WCF] Pošiljanje slike večje od 20KB

Neon87 ::

Pozdravljeni,

velike probleme mi dela shranjevanje ozadij, ki so večja od 20KB (za manjše dela brezhibno). Pošiljam jih kot polje byte[] iz Silverligt projekta na proxy projekt(WCF), iz katerega se potem dalje kličejo DAO metode...
Ko shranim sliko, ne pridem niti do proxy-a, da omogočim sprejemanje večjih slik je potrebno nastaviti web.config.
Le-tega sem nastavil na milijon in en način kot mi je povedal google, povprašal sem tudi na silverlight forumu, kjer nekomu dela pa ima identične nastavitve kot jaz.
Silverlight forum

source web.config:
<system.serviceModel>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
    <client/>
    <bindings>
      <basicHttpBinding>
        <binding name="LargeData" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Web.TERRA.Proxy.SLProxyBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
          <bufferedReceive maxPendingMessagesPerChannel="2147483647"/>
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="Web.TERRA.Proxy.SLProxyBehavior"
        name="Web.TERRA.Proxy.SLProxy">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeData"
          name="endpoint" contract="Web.TERRA.Proxy.ISLProxy" />
      </service>
    </services>
  </system.serviceModel>

detroit ::

kaj pa če bi sliko shrajneval v dataset/datatable.column(byte[]). Sicer je to neka postranska rešitev upam pa da ni offtopic oz. čist faljen
Skero

Neon87 ::

Tukaj ni problem s podatkovno bazo. Isto bi prišlo do errorja, ker WCF noče sprejet več od 20KB podatkov..potem naprej bi že šlo.

detroit ::

oops sorry ne poznam communication foundationa mam nek knjigo sam cajta ne brat:) pol pa veliko sreče naprej
Skero

zenb ::

Imam identičen problem. Prebrskal ogromno strani, vendar nobena rešitev ni delovala. Poskušal sem nastavit tudi v kodi, vendar ni delovalo.

 BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
 binding.MaxReceivedMessageSize = 2147483647;
 binding.MaxBufferSize = 2147483647;


Ne vem, poskusi če bo tebi delovalo.

Prav tako sem dodal v machine.config
 <httpRuntime executionTimeout="240" maxRequestLength="20480" />
, vendar brez uspeha.

Če trace-am upload mi vedno vrže enako napako:
The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.

Poglej če imaš v projektu ServiceReferences.ClientConfig in preveri kakšne nastavitve imaš notri. Če datoteke nimaš v projektu, jo ustvari tako, da greš v Visual-u pod Tools in WCF Service Configuration Editor in ti jo bo ustvarilo. Očitno ima Visual Studio nek bug in se config file ne doda avtomatsko.

Vendar to še ni rešilo mojega problema. Enostavno ne deluje nič. Sam pošiljam preko List-a v katerem imam ustvarjene objekte in notri enako kot ti byte arrey-e.

Čudno je to, ker naj bi bilo v ASP.NET in Silverlightu limit za velikost transakcij 4mb, sem preveril tudi če bi bil problem v IIS7 vendar je tam limit 30mb, tako da mi ni jasno v čem bi lahko bil problem.

Sem že razmišljal kako bi razbil datoteke na več manjših delov in jih posebej pošiljal preko. Ne vem, enostavno pa ne deluje nič od zgoraj navedenega. Lahko pa ti poskusiš, če bo mogoče pri tebi delovalo.

Še ena zanimiva stvar, ki me bega je, da lahko iz WCF service pošljem file večji file, ne vem velikosti 1-2 mb, če pa pošiljam iz client-a na WCF pa ne gre. Imaš ti enak problem?

Zgodovina sprememb…

  • spremenil: zenb ()

Neon87 ::

jaz imam identičen problem, probal sem vse zgoraj našteto..pa brez uspeha. Za reševanje tega problema sem porabil skoraj celotne 3 šihte..:|

zenb ::

Če ti še ni uspelo pripraviti WCF, da prenese večje količine podatkov lahko poskusiš z WCF Stream, kjer lahko fajl razdeliš na več manjših delov in pošlješ del po del service, kjer sestaviš nazaj v prvotni fajn. Sam bom poskusil s to rešitvijo.

Več si lahko prebereš na WCF Stream

Neon87 ::

tole mi končno dela!
<system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding
          maxReceivedMessageSize="2147483647">
          <readerQuotas
            maxDepth="64"
            maxStringContentLength="2147483647"
            maxArrayLength="2147483647"
            maxBytesPerRead="4096"
            maxNameTableCharCount="16384"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <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" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

zenb ::

Super, tudi pri meni deluje. Najlepša hvala, da si prilepil rešitev tukaj na forumu.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] WPF vprašanja

Oddelek: Programiranje
101122 (744) Ciklamen
»

[C#] Pravice za spreminjanje in restore baze

Oddelek: Programiranje
51056 (876) nuclear
»

Masterpage in jQuery(ajax call)

Oddelek: Programiranje
61351 (1179) hatchette
»

Silverlight

Oddelek: Programiranje
161736 (1393) hodor
»

ASP.NET MVC - HttpException

Oddelek: Programiranje
6816 (722) hendriks

Več podobnih tem