Исключение WCF - «Служба не найдена» при получении большой коллекции - PullRequest
0 голосов
/ 30 марта 2009

моя служба WCF используется приложением Silverlight для извлечения данных. У меня нет проблем,

    [OperationContract]
MyCollectionClass GetList(int sessID, string name);

  [CollectionDataContract]
public class MyCollectionClass : List<MyClass>{ }

  [DataContract]
public class MyClass {

  [DataMember]
  public string Prop1 { get; set; }

  [DataMember]
  public string Prop2 { get; set; }

}

Но .. когда у MyCollectionClass меньше 3000 записей, это работает. Когда количество записей больше, служба WCF, похоже, работает, но для завершенного события приложения Silverlight возникает исключение: «Служба не найдена».
Я обнаружил, что это может быть связано с настройкой службы, и я попытался использовать оба:

maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"

в конфигурации WCF и клиента. Также добавлено:

readerQuotas: 
  maxArrayLength="2000000" 
  maxStringContentLength="2000000"/>

(также изменил найденные значения) Но, похоже, не работает. Я думаю, что проблема в том, что сообщение превышает максимальное количество байт на «сообщение», но я не понимаю, почему данные не охватываются другим сообщением.
Любые советы приветствуются.

Giorgio

Ответы [ 6 ]

1 голос
/ 01 апреля 2009

У меня была та же проблема, в моем случае это была просто сериализация строки, и никаких проблем там не было, НО в вашем случае вы сериализуете большую группу объектов, для этого есть ограничение по умолчанию, я помню, я видел пост об этом (просто настройка в config -> maxItemsInObjectGraph), чтобы увеличить это количество сериализованных объектов,

Ссылки

http://silverlight.net/forums/t/17674.aspx http://forums.asp.net/t/1330713.aspx

Настройки:

НТН Braulio

0 голосов
/ 13 января 2012

Могу ли я предложить вам уменьшить количество возвращаемых записей? Не как обходной путь, а как предложение по удобству использования. Я не могу представить, чтобы кто-то справлялся с показом более 3000 записей. Если вы будете собирать значения из набора данных, а не агрегировать их на стороне сервера, это значительно повысит производительность вашего приложения ... Я сталкивался с этим пару раз в своих приложениях, и почти всегда получалось лучше менять дизайн варианты ...

0 голосов
/ 29 июня 2011

Я использую silverlight 4 и 2010, и у меня возникла та же проблема, и я решил изменить файл web.config.

Мой оригинальный файл web.config содержал:

<system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

И я изменил это на:

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <behaviors> 
         <serviceBehaviors> 
             <behavior> 
                 <serviceMetadata httpGetEnabled="true"/> 
                 <serviceDebug includeExceptionDetailInFaults="true"/> 
                 <dataContractSerializer maxItemsInObjectGraph="2147483647"/>  <!--this very is important: it is the size of the buffer-->
             </behavior> 
         </serviceBehaviors> 
     </behaviors>
  </system.serviceModel>
0 голосов
/ 05 марта 2010
0 голосов
/ 02 апреля 2009

Я использую эти 2 утверждения сразу после InitializeComponent:

binding.MaxReceivedMessageSize = 5000000 binding.MaxBufferSize = 5000000

Вы можете изменить числа на то, что вы хотите, но мне пришлось это сделать, чтобы получить большой объем данных на клиенте Silverlgiht. Мой объект привязки определяется как:

Привязка как новая. BasicHttpBinding

Это на vb.net. Работает как брелок после включения этих предметов.

0 голосов
/ 30 марта 2009

Попробуйте включить ведение журнала службы wcf на стороне сервера. Это может помочь: http://msdn.microsoft.com/en-us/library/ms730064.aspx

...