maxItemsInObjectGraph проигнорирован

У меня есть проблема с сервисом WCF, который пытается сериализировать слишком много данных. От трассировки я получаю ошибку, которая говорит, что максимальное число элементов, которые могут быть сериализированы или не сериализированы, '65536', попытайтесь увеличить квоту MaxItemsInObjectGraph.

Таким образом, я пошел и изменил это значение, но оно просто проигнорировано (ошибка является тем же с тем же числом). Все это - серверная сторона. Я называю сервис через wget в настоящий момент.

Моя веб-конфигурация похожа на это:

<system.serviceModel>  
  <behaviors>
   <serviceBehaviors>
    <behavior name="AlgoMap.Web.MapService.MapServiceBehavior">
       <dataContractSerializer maxItemsInObjectGraph="131072" />
       <serviceMetadata httpGetEnabled="true" />
       <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <bindings>
   <customBinding>
    <binding name="customBinding0" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:02:00">
      <binaryMessageEncoding>
        <readerQuotas maxDepth="64" maxStringContentLength="16384"
                                maxArrayLength="16384" maxBytesPerRead="16384"
                                maxNameTableCharCount="16384" />
      </binaryMessageEncoding>
      <httpTransport />
    </binding>
   </customBinding>
  </bindings>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
   <service behaviorConfiguration="AlgoMap.Web.MapService.MapServiceBehavior"
    name="AlgoMap.Web.MapService.MapService">
    <endpoint address="" binding="customBinding" bindingConfiguration="customBinding0"
     contract="AlgoMap.Web.MapService.MapService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service>
  </services>
 </system.serviceModel>



Версия 2, не работая также:

 <system.serviceModel>  
  <behaviors>

    <endpointBehaviors>
      <behavior name="AlgoMap.Web.MapService.MapServiceEndpointBehavior">
         <dataContractSerializer maxItemsInObjectGraph="131072" />
      </behavior>
    </endpointBehaviors>

   <serviceBehaviors>
    <behavior name="AlgoMap.Web.MapService.MapServiceBehavior">
       <serviceMetadata httpGetEnabled="true" />
       <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
  <bindings>
   <customBinding>
    <binding name="customBinding0" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:02:00">
      <binaryMessageEncoding>
        <readerQuotas maxDepth="64" maxStringContentLength="16384"
                                maxArrayLength="16384" maxBytesPerRead="16384"
                                maxNameTableCharCount="16384" />
      </binaryMessageEncoding>
      <httpTransport />
    </binding>
   </customBinding>
  </bindings>

  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <services>
   <service behaviorConfiguration="AlgoMap.Web.MapService.MapServiceBehavior"
    name="AlgoMap.Web.MapService.MapService">
     <endpoint 
        address="" binding="customBinding" bindingConfiguration="customBinding0"
        contract="AlgoMap.Web.MapService.MapService" 
        behaviorConfiguration="AlgoMap.Web.MapService.MapServiceEndpointBehavior" />
    <endpoint 
        address="mex" binding="mexHttpBinding" contract="IMetadataExchange"  
        behaviorConfiguration="AlgoMap.Web.MapService.MapServiceEndpointBehavior" />
   </service>
  </services>
 </system.serviceModel>

Кто-либо может помочь??Спасибо!!

7
задан Palantir 24 February 2010 в 12:46
поделиться

3 ответа

Любые настройки, помещенные в web.config, были благополучно проигнорированы, я не знаю почему. Но я нашел обходной путь, то есть поместить MaxItemsInObjectGraph в качестве украшения класса . Это работает безупречно:

// MyService.svc
// using...

namespace MyNamespace {
  [ServiceContract]
  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  [ServiceBehavior(MaxItemsInObjectGraph = 65536000)]
  public class MyWebService {

    [OperationContract]
    [WebGet(UriTemplate = "tree/{sessionId}", ResponseFormat = WebMessageFormat.Json)]
    public MyData GetTree(string sessionId) {
    ...
...
10
ответ дан 6 December 2019 в 12:50
поделиться

В этом случае notification.defaults является битовым массивом . Используя | = , вы добавляете Notification.DEFAULT _ VIBRATE в набор опций по умолчанию. Внутри Уведомления , вероятно, что наличие этого конкретного значения будет проверено на наличие, например:

notification.defaults & Notification.DEFAULT_VIBRATE != 0 // Present
-121--2593428-

Я бы хотел получить ответ на этот. Это похоже на зияющую дыру в API прямо сейчас, и смешно, что SMS поддерживается, а MMS нет.

Вы можете использовать само приложение MMS; там есть код для отправки MMS. Источник можно увидеть в репозитории источников Android

-121--4013280-

Возможно, он еще маленький? Вы пытались дать большую ценность, как 655360000? Обратите внимание, что необходимо изменить значение в конфигурационных файлах клиента и сервера. Я думаю, что вы изменились только в одной части;)

1
ответ дан 6 December 2019 в 12:50
поделиться

После небольшого поиска в Google кажется, что вы добавляете параметр не в то место.

Вам необходимо создать новое поведение в разделе endPointBehaviors (не serviceBehaviors ).

1
ответ дан 6 December 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: