Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 错误400(错误请求):我的WCF服务未考虑maxReceivedMessageSize_.net_Wcf_Soap_Web Config_Wcf Binding - Fatal编程技术网

.net 错误400(错误请求):我的WCF服务未考虑maxReceivedMessageSize

.net 错误400(错误请求):我的WCF服务未考虑maxReceivedMessageSize,.net,wcf,soap,web-config,wcf-binding,.net,Wcf,Soap,Web Config,Wcf Binding,几乎在同一个标题上有多个相关的问题,没有一个能帮助我解决 解决我的问题。请不要像以前一样关闭我的问题 读它。谢谢 我目前正在使用WCF公开Web服务SOAP HTTP。它目前部署在IIS Express中。我的问题是,我无法从我的客户那里使用我的服务。我的客户端收到HTTP错误400错误请求异常 然后,我在服务器端激活了跟踪,以查看实际发生的情况,下面是我得到的: 我已将错误消息翻译成英语:已超过传入消息65536的最大消息大小配额。要增加配额,请在相应的绑定元素上使用MaxReceivedMe

几乎在同一个标题上有多个相关的问题,没有一个能帮助我解决 解决我的问题。请不要像以前一样关闭我的问题 读它。谢谢

我目前正在使用WCF公开Web服务SOAP HTTP。它目前部署在IIS Express中。我的问题是,我无法从我的客户那里使用我的服务。我的客户端收到HTTP错误400错误请求异常

然后,我在服务器端激活了跟踪,以查看实际发生的情况,下面是我得到的:

我已将错误消息翻译成英语:已超过传入消息65536的最大消息大小配额。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性

事实上,这是不言自明的。由于我的SOAP消息很重,它可能超过了64KB的限制

我决定在绑定配置中扩展这个限制。下面是我的web.config服务器端:

<services>
  <service name="MyServiceName">
    <endpoint binding="basicHttpBinding"
              bindingConfiguration="MyBindingConfiguration"
              bindingNamespace="http://my_namespace"
              contract="XXX.IMyContract" />
  </service>
</services>

<bindings>
  <basicHttpBinding>
    <binding name="MyBindingConfiguration"
             allowCookies="true"
             maxReceivedMessageSize="2147483647"
             maxBufferSize="2147483647"
             maxBufferPoolSize="2147483647">
      <readerQuotas maxDepth="32" maxArrayLength="2147483647" maxStringContentLength="2147483647" />
    </binding>
  </basicHttpBinding>
</bindings>
然后我重新部署了我的服务,问题仍然存在HTTP 400,客户端的错误请求+服务器端的MaxReceivedMessageSize限制为65536

然后,我用一条非常小的SOAP消息测试了我的服务:一切都很好。所以问题是我的信息超过了64KB

我昨天花了两个小时试图找出我的配置有什么问题。。。可能是显而易见的,但我找不到

我在谷歌上搜索了很多关于这个问题的信息,95%的时间是因为开发人员忘记在服务端点中指定bindingConfiguration属性。正如您在上面的my web.config中所看到的,这对我来说没问题

然后我找到了

正如作者在问题中所说,将绑定配置的名称设置为string.Empty可以解决问题:

<services>
  <service name="MyServiceName">
    <endpoint binding="basicHttpBinding"
              bindingConfiguration=""
...

<bindings>
  <basicHttpBinding>
    <binding name=""
...
使用默认绑定时,一切正常。我无法使用此解决方法解决问题,因为我需要在同一web.config中指定多个不同的绑定配置

我在这里重新创建一个问题,因为它实际上不是相同的条件:我的服务不是自托管的,而是托管在IIS Express或IIS 7.5中,经过测试,存在相同的问题

我发现了一个与自托管服务相关的问题,这个问题与这种特殊性有关。所以我认为这两个问题之间有些不同

我想我的配置显然有问题,但我找不到什么。
感谢您的帮助。

乍一看,一切都很好-唯一的问题是:属性必须与您的完全限定服务实现类(包括所有名称空间等)完全匹配-是这样吗


我这样问是因为您有contract=XXX.IMyContract指示名称空间,但您的属性没有任何名称空间提示。

乍一看一切似乎都很好-唯一的问题是:该属性必须与完全限定的服务实现类(包括所有名称空间等)完全匹配-是这样吗


我之所以这样问,是因为您的contract=XXX.IMyContract指示了一个名称空间,但您的属性没有暗示任何名称空间。

请在服务中尝试以下web配置设置:

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <standardEndpoints>

            <webHttpEndpoint>
                <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"                                        
                                  crossDomainScriptAccessEnabled="true" 
                                  maxReceivedMessageSize="2147483647" 
                                  maxBufferSize="2147483647" 
                                  maxBufferPoolSize="4194304" />
            </webHttpEndpoint>

    </standardEndpoints>

    <bindings>
        <webHttpBinding>
            <binding>
                <readerQuotas maxStringContentLength="2147483647"/>
            </binding>
        </webHttpBinding>
    </bindings>

</system.serviceModel>

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

请在服务中尝试以下web配置设置:

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <standardEndpoints>

            <webHttpEndpoint>
                <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"                                        
                                  crossDomainScriptAccessEnabled="true" 
                                  maxReceivedMessageSize="2147483647" 
                                  maxBufferSize="2147483647" 
                                  maxBufferPoolSize="4194304" />
            </webHttpEndpoint>

    </standardEndpoints>

    <bindings>
        <webHttpBinding>
            <binding>
                <readerQuotas maxStringContentLength="2147483647"/>
            </binding>
        </webHttpBinding>
    </bindings>

</system.serviceModel>

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

乍一看,一切似乎都很好-唯一的问题是:属性必须与完全限定的服务实现类(包括所有名称空间等)完全匹配-是这样吗??我这样问是因为您有contract=XXX.IMyContract指示名称空间,但您的服务名称=。。。。属性没有暗示任何名称空间…您可以在服务器和客户端配置中不定义绑定配置的名称,例如have-without-name=MyBinding属性。在这种情况下,如果没有指定要使用的特定绑定配置,则该绑定配置将应用于使用该绑定的所有端点。@marc\s您完全正确:我忘了指定服务名称的命名空间。我刚刚用完整的限定名称测试了我的服务,它现在可以正常工作了!我一个人永远也找不到这个。为什么我的服务在一个小的SOAP消息中运行得很好?在不使用名称空间的情况下指定服务名称会破坏绑定配置,而不是服务本身—它甚至可以很好地处理带有随机名称的小消息!。在我看来,这是一个非常奇怪的行为。无论如何,你解决了我的问题,请写下这个作为答案,这样我就可以接受了。非常感谢。乍一看一切似乎都很好-唯一的问题是:属性必须与完全限定的服务实现类(包括所有名称空间等)完全匹配-是这样吗??我这样问是因为您有contract=XXX.IMyContract指示名称空间,但您的服务名称=。。。。属性没有任何名称空间提示…您可以在服务器和
客户机配置不定义绑定配置的名称,例如have而不定义name=MyBinding属性。在这种情况下,如果没有指定要使用的特定绑定配置,则该绑定配置将应用于使用该绑定的所有端点。@marc\s您完全正确:我忘了指定服务名称的命名空间。我刚刚用完整的限定名称测试了我的服务,它现在可以正常工作了!我一个人永远也找不到这个。为什么我的服务在一个小的SOAP消息中运行得很好?在不使用名称空间的情况下指定服务名称会破坏绑定配置,而不是服务本身—它甚至可以很好地处理带有随机名称的小消息!。在我看来,这是一个非常奇怪的行为。无论如何,你解决了我的问题,请写下这个作为答案,这样我就可以接受了。非常感谢。这解决了我的问题,谢谢。正如在注释中所说的,在不使用名称空间的情况下指定服务名称会破坏绑定配置,而不是服务本身—它甚至可以很好地处理带有随机名称的小消息!。我可以问你,你是否知道为什么服务会这样做?@ken2k:我相信你已经成为新WCF 4默认行为的受害者。如果WCF 4找不到服务的配置,因为它不在那里,或者服务名称拼写错误,那么它只会使用一些系统默认值,比如HTTP作为协议和HTTP绑定。这很可能就是发生在你身上的事情——WCF 4运行时启动了你的服务——但只有默认设置,例如64K默认消息大小——即使你有一个config.marc_,我还是要感谢你对这件事的透彻解释。这刚刚解决了我遇到的一个相同问题。这是一个多么令人沮丧的特性,这种默认行为毫无意义。这解决了我的问题,谢谢。正如在注释中所说的,在不使用名称空间的情况下指定服务名称会破坏绑定配置,而不是服务本身—它甚至可以很好地处理带有随机名称的小消息!。我可以问你,你是否知道为什么服务会这样做?@ken2k:我相信你已经成为新WCF 4默认行为的受害者。如果WCF 4找不到服务的配置,因为它不在那里,或者服务名称拼写错误,那么它只会使用一些系统默认值,比如HTTP作为协议和HTTP绑定。这很可能就是发生在你身上的事情——WCF 4运行时启动了你的服务——但只有默认设置,例如64K默认消息大小——即使你有一个config.marc_,我还是要感谢你对这件事的透彻解释。这刚刚解决了我遇到的一个相同问题。这是一个多么令人沮丧的特性,这种默认行为毫无意义。