0

サードパーティがホストする Web サービスから数十万のエンティティをダウンロードする必要があります。Web サービスでは、Web サービスの呼び出しごとに最大 2,000 のエンティティを取得できますが、実際には、より多くのレコードを呼び出すと断続的にエラーが発生するため、一度に 50 ~ 75 のエンティティしか取得できませんでした。問題が自分の側で調整する必要がある設定によるものなのか、サード パーティの Web サービス プロバイダーに問題があるのか​​を判断しようとしています。これが私が受け取るエラーです:

https://some.vendor.com/API/SomeService.svcへの HTTP 応答の受信中にエラーが発生しました 。これは、サービス エンドポイント バインディングが HTTP プロトコルを使用していないことが原因である可能性があります。これは、HTTP 要求コンテキストがサーバーによって中止されたことが原因である可能性もあります (サービスのシャットダウンが原因である可能性があります)。詳細については、サーバー ログを参照してください。

以下は、Web サービスをバインドするためのアプリケーション構成設定のコピーです。

<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="SomeService">
                <security defaultAlgorithmSuite="Default" authenticationMode="UserNameOverTransport"
                    requireDerivedKeys="true" securityHeaderLayout="Strict" includeTimestamp="true"
                    keyEntropyMode="CombinedEntropy" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
                    <localClientSettings cacheCookies="true" detectReplays="false"
                        replayCacheSize="900000" maxClockSkew="00:05:00" maxCookieCachingTime="Infinite"
                        replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
                        sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true"
                        timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" />
                    <localServiceSettings detectReplays="false" issuedCookieLifetime="10:00:00"
                        maxStatefulNegotiations="128" replayCacheSize="900000" maxClockSkew="00:05:00"
                        negotiationTimeout="00:01:00" replayWindow="00:05:00" inactivityTimeout="00:02:00"
                        sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00"
                        reconnectTransportOnFailure="true" maxPendingSessions="128"
                        maxCachedCookies="1000" timestampValidityDuration="00:05:00" />
                    <secureConversationBootstrap />
                </security>
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap11" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>
                <httpsTransport manualAddressing="false" maxBufferPoolSize="2147483647"
                    maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Anonymous"
                    bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                    keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous"
                    realm="" transferMode="Streamed" unsafeConnectionNtlmAuthentication="false"
                    useDefaultWebProxy="true" requireClientCertificate="false" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="https://secure.Some.com/API/1.2/Service.svc"
            binding="customBinding" bindingConfiguration="SomeService"
            contract="SomeService.SomeService" name="SomeService" />
    </client>
</system.serviceModel>

アプリケーション構成バインディングでわかるように、maxBufferPoolSize、maxReceivedMessageSize、および maxBufferSize を 2147483647 に増やしました。また、transferMode を Streamed に変更しました。

4

1 に答える 1

0

動作を追加することで設定できる重要な設定がもう 1 つあります。

<behaviors>
  <endpointBehaviors>
    <behavior name="SomeBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </endpointBehaviors>
</behaviors>

次に、エンドポイントを更新します。

<client>
  <endpoint address="https://secure.Some.com/API/1.2/Service.svc"
     binding="customBinding" bindingConfiguration="SomeService"
     contract="SomeService.SomeService" name="SomeService"
     **behaviorConfiguration="SomeBehavior"**/>
</client>
于 2012-07-27T20:48:54.997 に答える