需要帮助:“远程服务器返回了意外响应:(400) 错误请求." [英] Need help with: "The remote server returned an unexpected response: (400) Bad Request."

查看:32
本文介绍了需要帮助:“远程服务器返回了意外响应:(400) 错误请求."的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 WCF 服务,它运行良好有一段时间了,我决定向它添加一些东西.所有旧的东西都可以正常工作,而新的东西适用于从客户端到主机的较小传输.但是,当客户端尝试向主机发送大字符串时,它会因(400)错误请求"而崩溃.无需更改任何内容,主机可以毫无问题地向客户端发送同样大或更大的项目.

I have a WCF service that has been working fine for some time now, and I decided to add something to it. All of the old stuff works just as it should and the new stuff works for smaller transfers from the client to the host. However, it blows up with a "(400) Bad Request" when the client tries to send large strings to the host. Without changing anything, the host can send items that are just as large or larger to the client with no problem.

我环顾了这里和其他网站,虽然我发现有人遇到了同样的问题,但他们的解决方案(增加 app.config 的大小和长度)并没有为我的问题带来任何成功.

I've looked around on here and other sites, and while I've found people with the same problem, their solutions (increasing app.config sizes and lengths) have not yielded any successes for my problem.

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>

推荐答案

首先, 客户端上的maxReceivedMessageSize"仅在客户端接收消息(响应)时使用,因此在您的情况下您不'根本不必在客户端设置 MaxReceivedMessageSize;它永远不会被使用.您确实需要在服务端进行设置.

First, the "maxReceivedMessageSize" on the client is used only when client receives messages (responses), so in your case you don't have to setup MaxReceivedMessageSize on the client at all; it will never be used. You do need to set it up on the service side.

请参阅其他 stackoverflow 主题.请参阅 这篇博文 介绍了如何在服务端进行设置;正如您可以想象的那样,这与您在客户端完成的方式类似.

See other stackoverflow topics on this if you have trouble. See this blog post on how to set this up on the service side in general; it is similar to how you have done it on the client end, as you can imagine.

其次, 可能与安全相关.如果是这样,您或许可以通过查看这些文章来解决问题:

Second, it is a possibility that this is security-related. In case it is, you might be able to solve the problem by looking at these articles:

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

第三,简单地将错误请求"报告为错误消息是没有用的.:-) 请参阅我在 WCF not deserializing JSON input 上的回答有关如何改进跟踪、调试和详细信息功能的详细步骤,以便您可以更好地处理服务端和客户端到底出了什么问题.

Third, simply reporting a "bad request" as an error message is useless. :-) Please see my answer at WCF not deserializing JSON input for detailed steps on how you can improve your tracing, debugging, and details capabilities so that you can have a better handle on what exactly is going wrong on both the service and client end.

希望这会有所帮助!

这篇关于需要帮助:“远程服务器返回了意外响应:(400) 错误请求."的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆