Нужна помощь с: «Удаленный сервер возвратил неожиданный ответ: (400) Неверный запрос». - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть служба WCF, которая уже давно работает нормально, и я решил кое-что добавить к ней.Все старые вещи работают так, как должны, а новые работают для небольших передач от клиента к хосту.Тем не менее, он взрывается "(400) неверный запрос", когда клиент пытается отправить большие строки на хост.Ничего не меняя, хост может без проблем отправлять клиенту такие же большие или большие элементы.

Я просматривал здесь и на других сайтах, и хотя я нашел людей с такими жепроблема, их решения (увеличение размеров и длины 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>

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Во-первых, «maxReceivedMessageSize» на клиенте используется только тогда, когда клиент получает сообщения (ответы), поэтому в вашем случае вам вообще не нужно настраивать MaxReceivedMessageSize на клиенте;это никогда не будет использовано.Вам необходимо настроить его на стороне службы.

См. другие темы stackoverflow по этому вопросу, если у вас возникли проблемы.См. в этом блоге о том, как настроить это на стороне службы в целом;это похоже на то, как вы сделали это на стороне клиента, как вы можете себе представить.

Во-вторых, это - это вероятность того, что это связано с безопасностью.Если это так, вы можете решить проблему, просмотрев следующие статьи:

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

В-третьих, просто сообщать о «неверном запросе» как сообщении об ошибке, бесполезно.:-) Пожалуйста, смотрите мой ответ на WCF, не десериализующий ввод JSON , чтобы получить подробные инструкции о том, как вы можете улучшить свои возможности трассировки, отладки и детализации, чтобы вы могли лучше понять, что именно происходит неправильноконец службы и клиента.

Надеюсь, это поможет!

0 голосов
/ 17 апреля 2011

Вы пробовали HTTP POST?Вы можете отправить намного больше данных с помощью POST, чем GET.

...