Why is my WCF Service not loading my Binding config?

前端 未结 2 994
自闭症患者
自闭症患者 2021-02-14 12:11

I have the problem with the following error: \"The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceived

相关标签:
2条回答
  • 2021-02-14 12:26

    The maxBufferPoolSize and maxReceivedMessageSize are not exposed to the client, only the server is aware of them. the sizes the client is using are defaults, just change them to be whatever size you want. obviously this is problematic if you are regenerating it alot, but i don't think there is much alternative.

    0 讨论(0)
  • 2021-02-14 12:46

    WCF does not import all settings from your server. There's no switch to turn that on, either. While it might make sense in many cases, it wouldn't always be a good idea to just duplicate all settings from the server-side to the client.

    So in your case, what you need to do is add that binding configuration to your client side proxy, too, and reference it from your client endpoint.

    If you control both ends of the wire, you can ease your work a bit: externalize the binding configuration into a separate file and reference it.

    So create a file bindings.config that contains:

    <?xml version="1.0" ?>
    <bindings>
        <wsHttpBinding>
            <binding name="default" 
                     maxBufferPoolSize="2147483647" 
                     maxReceivedMessageSize="2147483647"/>
      </wsHttpBinding>
    </bindings>
    

    and then you can copy that file both into the server and the client project, and reference it from within your service and client config:

    <system.serviceModel>
        <bindings configSource="bindings.config" />
        <services>
          <service name="WCF.Service.Service">
            <endpoint address="ws" name="ws" bindingConfiguration="default" binding="wsHttpBinding" contract="WCF.Service.Contracts.IService" />
            <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
          </service>
        </services>
    

    and on your client side:

    <system.serviceModel>
        <bindings configSource="bindings.config" />
        <client>
            <endpoint  name="ws"
                address="http://localhost:37444/Service.svc/ws" 
                binding="wsHttpBinding"
                bindingConfiguration="default" 
                contract="IService">
                <identity>
                    <userPrincipalName value="username@domain" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
    

    That way, you can have your configuration for the bindings done once, and used in both places.

    0 讨论(0)
提交回复
热议问题