Why is my WCF Service not loading my Binding config?

て烟熏妆下的殇ゞ 提交于 2019-12-03 12:23:10

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.

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!