设置MaxReceivedMessageSize(远程服务器返回意外响应:(400)Bad Request。)web.config不起作用

时间:2012-04-14 00:20:35

标签: wcf

我一直在处理这个错误一周,搜索后仍无法解决。 错误是:

  

远程服务器返回了意外的响应:(400)错误   请求。

我尝试通过WCF从Windows手机应用程序保存图像,我知道我需要将MaxReceivedMessageSize设置为高于默认值!我曾尝试过一切,但没有运气!

我的web.config文件(wcf服务)

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IService1"
                maxReceivedMessageSize="2147483647"
                maxBufferSize="2147483647"
                maxBufferPoolSize="2147483647"
                hostNameComparisonMode="StrongWildcard"
                receiveTimeout="00:10:10"
                sendTimeout="00:10:00"
                openTimeout="00:10:00"
                closeTimeout="00:10:00"
                transferMode="Buffered"
                messageEncoding="Text"
                textEncoding="utf-8"
                bypassProxyOnLocal="false"
                useDefaultWebProxy="true" >
          <readerQuotas
             maxDepth="2147483647"
             maxStringContentLength="2147483646"
             maxArrayLength="2147483647"
             maxBytesPerRead="2147483647"
             maxNameTableCharCount="2147483647"/>
        </binding>
      </basicHttpBinding>
    </bindings>
   <services>
     <service name="Service1" behaviorConfiguration="Service1Behavior">
       <endpoint
          address=""
         binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IService1"  
          contract="IService1" />
        <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange"
        />
     </service>
   </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Service1Behavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
</configuration>

在我的Windows手机应用程序中只有ServiceReferences.ClientConfig

<configuration>
   <system.serviceModel>
      <bindings>
         <basicHttpBinding>
            <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
               <security mode="None" />
            </binding>
         </basicHttpBinding>
       </bindings>
       <client>
            <endpoint address="http://localhost:1772/Service1.svc" 
                binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService1" 
                contract="ServiceReference1.IService1"
                name="BasicHttpBinding_IService1" />
       </client>
   </system.serviceModel>
</configuration>

我也尝试在代码中设置绑定:

BasicHttpBinding binding = new BasicHttpBinding();
binding.MaxReceivedMessageSize = 2147483647;
binding.MaxBufferSize = 2147483647;

EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1772/Service1.svc");

Service1Client  proxy = new Service1Client(binding, endpointAddress);

我真的不知道如何解决这个问题......看起来服务器没有使用我的web.config文件???如果是这种情况我该如何更新呢?

2 个答案:

答案 0 :(得分:0)

您必须确认这确实是问题所在。首先,打开服务器上的WCF跟踪(http://blogs.msdn.com/b/madhuponduru/archive/2006/05/18/601458.aspx),看看有什么错误。

答案 1 :(得分:0)

乍一看似乎一切正常 - 除非我有预感,否则您的服务配置可能因为您的服务名称是奇数而被取消....

你有:

 <service name="Service1" >

您的服务类 - 实现服务合同的服务类 - 实际上只调用Service1并且不存在于任何名称空间内吗?

name=节点<service>属性的值必须与服务类类型的完全限定名称完全相同 - 所以最有可能的是,它会是这样的:

 <service name="MyNamespace.Service1" >

.NET命名空间您的Service1类所在的

如果该名称不匹配,那么WCF运行时将不使用该服务配置并回退到WCF默认值,这可以解释为什么它适用于较小的文件 - 但是对于较大的文件则失败的。