Сервисная регулировка WCF

Ответ на этот вопрос просто поставлен: Не используйте BOOLEAN с Oracle - PL / SQL немой, и он не работает. Для запуска процесса используйте другой тип данных.

Замечание для разработчиков отчетов SSRS с использованием Oracle datasource: вы можете использовать параметры BOOLEAN, но будьте осторожны с тем, как вы реализуете. Oracle PL / SQL отлично не работает с BOOLEAN, но вы можете использовать значение BOOLEAN в Tablix Filter, если данные находятся в вашем наборе данных. Это действительно сработало, потому что я использовал параметр BOOLEAN с источником данных Oracle. Но в этом случае я фильтровал данные Tablix, а не SQL-запрос.

Если данные НЕ находятся в ваших полях SSRS Dataset, вы можете переписать SQL что-то вроде этого с помощью параметра INTEGER:

__

<ReportParameter Name="paramPickupOrders">
  <DataType>Integer</DataType>
  <DefaultValue>
    <Values>
      <Value>0</Value>
    </Values>
  </DefaultValue>
  <Prompt>Pickup orders?</Prompt>
  <ValidValues>
    <ParameterValues>
      <ParameterValue>
        <Value>0</Value>
        <Label>NO</Label>
      </ParameterValue>
      <ParameterValue>
        <Value>1</Value>
        <Label>YES</Label>
      </ParameterValue>
    </ParameterValues>
  </ValidValues>
</ReportParameter>

...

<Query>
<DataSourceName>Gmenu</DataSourceName>
<QueryParameters>
  <QueryParameter Name=":paramPickupOrders">
    <Value>=Parameters!paramPickupOrders.Value</Value>
  </QueryParameter>
<CommandText>
    where 
        (:paramPickupOrders = 0 AND ordh.PICKUP_FLAG = 'N'
        OR :paramPickupOrders = 1 AND ordh.PICKUP_FLAG = 'Y' )

Если данные находятся в ваших полях SSRS Dataset Fields, вы можете использовать фильтр tablix с параметром BOOLEAN:

__

</ReportParameter>
<ReportParameter Name="paramFilterOrdersWithNoLoad">
  <DataType>Boolean</DataType>
  <DefaultValue>
    <Values>
      <Value>false</Value>
    </Values>
  </DefaultValue>
  <Prompt>Only orders with no load?</Prompt>
</ReportParameter>

...

<Tablix Name="tablix_dsMyData">
<Filters>
  <Filter>
    <FilterExpression>
        =(Parameters!paramFilterOrdersWithNoLoad.Value=false) 
        or (Parameters!paramFilterOrdersWithNoLoad.Value=true and Fields!LOADNUMBER.Value=0)
    </FilterExpression>
    <Operator>Equal</Operator>
    <FilterValues>
      <FilterValue DataType="Boolean">=true</FilterValue>
    </FilterValues>
  </Filter>
</Filters>
17
задан Spence 26 January 2009 в 14:51
поделиться

3 ответа

В то время как использование обязательных атрибутов и readerQuotas как Andrew Hare предлагает, будет допускать по существу неограниченный размер для наиболее практических применений, иметь в виду, что Вы столкнутся с другими проблемами, такими как тайм-ауты при принятии длительной команды, неважно, как тот сервис создается (использующий WCF или не).

, Каков размер Вашего сообщения, сервис WCF должны будут отрегулировать для производительности так, чтобы это не было лавинно разослано. Если Вы разместите его в IIS, или БЫЛ, то у Вас будут дополнительные встроенные функции тем, которые размещают среды, которые сделают Ваш сервис намного более "высоконадежным". Однако все еще необходимо обратить внимание на проблемы параллелизма. Следующая конфигурация WCF обеспечивает пример устанавливания некоторых значений регулировки.

   <system.serviceModel>

    ...

     <behaviors>
       <serviceBehaviors>
         <behavior name="GenericServiceBehavior">
           <serviceTimeouts transactionTimeout="00:09:10"/>
           <serviceThrottling
             maxConcurrentCalls="20"
             maxConcurrentSessions="20"
             maxConcurrentInstances="20"
           />
         </behavior>
       </serviceBehaviors>
     </behaviors>
   </system.serviceModel>
13
ответ дан 30 November 2019 в 13:54
поделиться

WCF действительно имеет предел размера полезной нагрузки по умолчанию, который отклонит сообщения по определенному числу байтов. Это настраивается, конечно, в обязательном разделе Вашего конфигурационного файла. Вот сырой пример с basicHttpBinding показ Вам многие атрибуты, доступные Вам:

<bindings>
    <basicHttpBinding>
        <binding name="testBinding" maxReceivedMessageSize="2147483647">
            <readerQuotas
              maxDepth="2147483647"
              maxStringContentLength="2147483647"
              maxArrayLength="2147483647"
              maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />
        </binding>
    </basicHttpBinding>

идея состоит в том, что можно создать много различной привязки, которую можно использовать для различных сценариев. Это хорошо, поскольку можно точно настроить, как сервисы используются и только увеличивают предел размера сообщения для конечных точек, которым нужны они.

3
ответ дан 30 November 2019 в 13:54
поделиться

При использовании NetTCPBinding или NetNamedPipeBinding, можно использовать свойство MaxConnections:

<bindings>
  <netTcpBinding>
    <binding name="myTCPBinding" maxConnections="15"/>
  </netTcpBinding>
</bindings>
3
ответ дан 30 November 2019 в 13:54
поделиться
Другие вопросы по тегам:

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