2011-02-05 14 views
8

WCF aracılığıyla Web Hizmetini uygularken bir sorun yaşıyorum. Ben mesaj serisini isterken biçimlendirici bir istisna attıWCF - Win Uygulaması “XML veri okunurken maksimum dize içerik uzunluğu kotası (8192) aşıldı.”

bir dize (xml), alma hatası olarak istemci uygulamasından WCF yönteminde değer geçirerek m iken: parametreyi serisini çalışılırken bir hata oluştu http://tempuri.org/:XmlEntity.

InnerException mesajı

oldu 'System.String türü nesneyi deserializing bir hata oluştu. maksimum dize içerik uzunluğu kotası (8192), XML verileri okunurken aşıldı. Bu kota, XML okuyucu oluşturulurken kullanılan XmlDictionaryReaderQuotas nesnesindeki MaxStringContentLength nesnesini değiştirerek artırılabilir. Satır 249, pozisyon 19. '.

İstemci web.configuration dosyasında maxStringContentLength değerini değiştirmeye çalıştım ancak hata aynı kalıyor. Lütfen en kısa sürede çözümü bulmaya çalışınız.

+2

config dosyalarınızın içeriğini hem istemcide hem de sunucuda kaydeder misiniz? – Tridus

cevap

7

sunucu ile istemci hem de bu değeri artırmayı deneyin:

<binding 
    name="myBinding" 
    maxReceivedMessageSize="2147483647"> 
     <readerQuotas 
      maxDepth="2147483647" 
      maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647" /> 
</binding> 
+0

Bu ayarları zaten kontrol ettim ama yine de başarısız oluyor. Çalışma zamanında belirtilen niteliklerin değerlerini kontrol ettim ve doğruydular. –

+1

@Ashish Ranjan, uç noktanız bu özel bağlayıcıyı ('myBinding ') kullanmak üzere yapılandırılmış mı? –

+0

Herhangi bir özel bağlama kullanmıyorum .... Ben sadece basicHttpBinding –

12

Ashish, Darin geçersiz kılmak ve onaylamak Can 2147483647 için maxStringContentLength değerini artırmak için bir basicHttpBinding oluşturduk gerektiği anlamına gelir bitiş noktası, bindingConfiguration özniteliğiyle aynı binidng'yi kullanacak şekilde yapılandırdınız. Örneğin, bir, böyle bağlayıcı oluşturduk

<basicHttpBinding> 
    <binding name="HandleLargeMessage" maxReceivedMessageSize="2147483647">   
     <readerQuotas maxDepth="2147483647" 
     maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" 
     maxBytesPerRead="2147483647" 
     maxNameTableCharCount="2147483647" /> 
    </binding> 
Sen, size olsun teyit edebilir

<endpoint 
    address="....." 
    binding="basicHttpBinding" bindingConfiguration="HandleLargeMessage" 
    contract="xxx" /> 

(bindingConfiguration niteliğini lütfen unutmayın) böyle yapılandırmayı bağlama yukarıda kullanmak üzere son nokta yapılandırabilirsiniz

Bunu zaten yaptın mı? büyük olasılıkla bu durumda görünmüyor.

Bunu daha önce izlemişseniz ve kullanılıp kullanılmadığını onaylamak isterseniz, WCF'yi ayrıntılı olarak hizmet ve istemci uygulaması için izler yakalayın ve istemci uygulamasındaki Sevice ve Construct kanalında Construct Host'daki etkinlikleri denetleyin.

-1

MaxStringContentLength boyutunun artırılması gerekir. Fakat tüm değerleri bu sayıya körü körüne arttırmamalısınız. Örneğin, maxDepth XML'de yuvalama düzeyleri ile ilgilidir ve varsayılan değerde bırakmak daha iyidir.

1

WCF ile her zaman olduğu gibi, burada MaxStringContentLength'u artırmak için programatik bir alternatif var.

BasicHttpBinding binding = new BasicHttpBinding(); 
binding.ReaderQuotas.MaxStringContentLength = 2147483647 

host.AddServiceEndpoint(contract, binding, address); 
İlgili konular