0

しばらくの間正常に動作しているWCFサービスがあり、それに何かを追加することにしました。古いものはすべて正常に機能し、新しいものはクライアントからホストへの小規模な転送で機能します。ただし、クライアントが大きな文字列をホストに送信しようとすると、「(400)BadRequest」で爆発します。ホストは何も変更せずに、同じかそれ以上のアイテムを問題なくクライアントに送信できます。

私はここや他のサイトを見回しましたが、同じ問題を抱えている人を見つけましたが、彼らの解決策(app.configのサイズと長さを増やす)は私の問題に対して何の成功ももたらしませんでした。

Web.config

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior>
                <serviceMetadata httpGetEnabled="true"/>
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
            <behavior  name="Throttled">
                <serviceThrottling
                    maxConcurrentCalls="1000"
                    maxConcurrentSessions="1000"
                    maxConcurrentInstances="1000" />
                <serviceMetadata
                    httpGetEnabled="true"
                    httpGetUrl="" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>

app.config

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IService" closeTimeout="00:01:00"
             openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
             allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
             maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
             messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
             useDefaultWebProxy="true">
                <readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                 maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                     realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="---HostingSiteURL---/Service.svc"
         binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
         contract="SimSyncServiceReference.IService" name="BasicHttpBinding_IService" />
    </client>
</system.serviceModel>
4

2 に答える 2

2

まず、クライアントの「maxReceivedMessageSize」は、クライアントがメッセージ(応答)を受信した場合にのみ使用されるため、この場合、クライアントでMaxReceivedMessageSizeを設定する必要はありません。使用されることはありません。サービス側で設定する必要があります。

問題が発生した場合は、これに関する他のスタックオーバーフローのトピックを参照してください。一般的にサービス側でこれを設定する方法については、このブログ投稿を参照してください。ご想像のとおり、これはクライアント側で行った方法と似ています。

第二に、これはセキュリティに関連している可能性がありますその場合は、次の記事を参照することで問題を解決できる可能性があります。

http://msdn.microsoft.com/en-us/library/bb628618.aspx http://msdn.microsoft.com/en-us/magazine/cc163570.aspx#S6 http://msdn.microsoft.com/ en-us / library / ms733130.aspx

第三に、単に「悪い要求」をエラーメッセージとして報告することは無意味です。:-)トレース、デバッグ、および詳細機能を改善して、サービス側とクライアント側の両方で何が問題になっているのかをより適切に処理できるようにする方法の詳細な手順については、JSON入力を逆シリアル化しないWCFでの私の回答を参照してください。 。

お役に立てれば!

于 2011-04-17T03:01:53.003 に答える
0

HTTP POST を試しましたか? POST を使用すると、GET よりも多くのデータを送信できます。

于 2011-04-17T01:30:48.760 に答える