1

プロジェクトでWCFを使用して、サーバー(データベースにアクセスする)とクライアント(画面にデータをプロットする)からデータを転送しています。

転送されるデータの量がかなり多いので、どちらが最善の方法か知りたいです。

現在、約3600個のオブジェクト(タイムスタンプとdouble値)の少量のデータをクエリできます。ただし、この数が約86400オブジェクトに増えると、サービス関数呼び出しでエラーが発生します。

私のサービスとクライアントは次のように宣言されています。

サーバ:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata/>
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="serviceName">
        <endpoint binding="netTcpBinding" contract="interfaceName">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5050/msservice"/>
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>

クライアント:

<system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_IService" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:02:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxConnections="10"  maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
            <message clientCredentialType="Windows"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:5050/msservice" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IService" contract="IService" name="NetTcpBinding_IService">
        <identity>
          <dns value="localhost"/>
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
4

1 に答える 1

1

.net 4を使用していますか?そうでない場合は、サービスの動作に名前を付けて、それをサービスに関連付ける必要があると思います。

編集:それ以外の場合は、デフォルトのmaxItemsInObjectGraph値65536を使用できます。

<system.serviceModel>
<services>
    <service name="YOURPROJECT.Web.YOURSERVICE"
            behaviorConfiguration="YOURPROJECT-Web-YOURSERVICE">
    </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="YOURPROJECT-Web-YOURSERVICE">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true" />
            <dataContractSerializer maxItemsInObjectGraph="6553600"/>
        </behavior>
    </serviceBehaviors>
</behaviors>
于 2012-04-17T22:18:46.527 に答える