none
WebService设置maxBufferPoolSize,maxReceivedMessageSize,maxNameTableCharCount大小 RRS feed

  • 问题

  • 问题:

    一、WinForm WebService客户端通过【添加Web引用】添加WebService服务端的引用,生成的配置文件如下(App.config):

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="WSController.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <WSController.Properties.Settings>
          <setting name="WSController_Ewell_EwellService" serializeAs="String">
            <value>http://192.168.60.88:5555/NIS_shizhongyi/EwellService</value>
          </setting>
        </WSController.Properties.Settings>
      </applicationSettings>
    </configuration>

    1、在如上配置文件中怎么设置WebService的最大可接收的数据大小和上传数据的大小?

    2、最大可接收的数据大小和上传数据的大小能否在代码中设置?


    (二)、其他解决方式:

    WinForm WebService客户端通过添加【添加服务引用】添加WebService服务端的引用,生成的配置文件如下(App.config):

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration> 
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="NIS_HospitalBinding" maxBufferPoolSize="2147483647"
              maxReceivedMessageSize="2147483647" >
              <readerQuotas maxNameTableCharCount="2147483647"/>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://192.168.60.88:5555/NIS_shizhongyi/EwellService"
              binding="basicHttpBinding" bindingConfiguration="NIS_HospitalBinding"
              contract="Ewell.NIS_Hospital" name="NIS_HospitalPort"/>
        </client>
      </system.serviceModel>
    </configuration>

    在binding节点中是可以通过设置maxBufferPoolSize和maxReceivedMessageSize来控制的,那么(一)中的方式怎么控制?

    Does anybody can help me ?


    2017年12月12日 9:45

全部回复

  • Hi,

    欢迎在MSDN论坛发帖。

    据我所知,如果要设置 maxReceivedMessageSize 属性,是必须在binding 节点里面才可以实现的,然后在 readerQuotas 里面定义count。

    你有尝试在第一个方式中添加 binding 节点吗? 根据我搜索的结果,官网上面也是提供类似第二种的解决方案,在service model里面添加binding。 详细信息,你可以参考一下

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年12月13日 6:49
    版主
  • Hi,

    第(一)种实现方式(通过【添加Web引用】的方式添加WebService)应该是比较传统的引用WebService的方式,我也想过能否在配置文件中进行控制,可是却不知道怎么下手。

    第(二)种实现方式(通过【添加服务引用】的方式添加WebService)应该是以类似添加WCF服务的方式添加的,bindings节点是自动生成的,我有试过按如下方式进行添加,如配置文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
          <section name="WSController.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <WSController.Properties.Settings>
          <setting name="WSController_Ewell_EwellService" serializeAs="String" binding="basicHttpBinding" bindingConfiguration="NIS_HospitalBinding">
            <value>http://192.168.60.29:5555/NIS_shizhongyi/EwellService</value>
          </setting>
        </WSController.Properties.Settings>
      </applicationSettings>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="NIS_HospitalBinding" maxBufferPoolSize="255"
              maxReceivedMessageSize="255" >
              <readerQuotas maxNameTableCharCount="255"/>
            </binding>
          </basicHttpBinding>
        </bindings>
      </system.serviceModel>  
      
    </configuration>

    但是未能解决。

    我想在WCF技术还未出现之前,传统添加WebService的方式(通过【添加Web引用】的方式添加WebService)是怎么实现来WebService发送和请求数据大小的控制的呢?

    十分感谢你的帮忙和建议,但是未能解决我的困惑。

    2017年12月15日 1:56
  • 你好,

    >>第(一)种实现方式(通过【添加Web引用】的方式添加WebService)应该是比较传统的引用WebService的方式,我也想过能否在配置文件中进行控制,可是却不知道怎么下手。

    不管是传统的Web Service, 还是WCF, 都是添加服务引用, 没有添加Web 引用.

    >>我想在WCF技术还未出现之前,传统添加WebService的方式(通过【添加Web引用】的方式添加WebService)是怎么实现来WebService发送和请求数据大小的控制的呢?

    都是加在binding 节点里面的maxReceivedMessageSize属性, 请注意单位是bytes

    <binding name="NIS_HospitalBinding" maxBufferPoolSize="255"
              maxReceivedMessageSize="6553600" >
              <readerQuotas maxNameTableCharCount="255"/>
    </binding>

    更多信息, 请参考

    https://weblogs.asp.net/hajan/transferring-large-data-when-using-web-services

    https://msdn.microsoft.com/en-us/library/system.servicemodel.httpbindingbase.maxreceivedmessagesize.aspx?f=255&MSPPError=-2147217396

    Best regards,

    Zhanglong Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年12月20日 8:54
    版主
  • Hi, Zhanglong Wu:

    【添加Web 引用】的方式是有的,如下图所示:

    通过:引用->添加服务引用->高级->添加web引用,此种方式添加WebService的方式生成的配置文件如(一)中所示,结构和添加服务引用生成的配置文件相差是很大的,我了解到的情况是,如果是在asp.net程序中引用WebService那么是可以通过

    <system.web>
       <httpRuntime   maxRequestLength= "51200"   executionTimeout="3600"   />
     </system.web>

    此种方式进行控制,那么在C/S框架中的配置文件或代码中如何去控制呢?

    2017年12月22日 7:30