Svcutil creates poor configuration with multiple endpoints

I have a WCF service that opened the soap and xml endpoint. When I use svcutil to create proxy code on the client side, the generated configuration contains two endpoints that cause the client to crash. If I edit the web.config file and delete the second endpoint (with user binding), everything will work as expected. Is there a way that I can get svcutil to create a configuration that only works so that I don't need to manually edit the file every time?

Client error:

The endpoint configuration section for the MyNamespace.ITestService contract could not be loaded because more than one endpoint configuration was found for this contract. Please indicate the preferred endpoint configuration section by name.

Svcutil Command:

svcutil http://api.local/Test.svc
    /reference:bin\MyNamespace.Interface.dll 
    /config:web.config 
    /mergeConfig 
    /out:"Service References\TestService.cs" 
    /n:*,MyNamespace

Generated client configuration:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_ITestService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
        <customBinding>
            <binding name="CustomBinding_ITestService">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap12" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://api2.local/Test.svc/soap" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_ITestService" contract="MyNamespace.ITestService"
            name="BasicHttpBinding_ITestService" />
        <endpoint binding="customBinding" bindingConfiguration="CustomBinding_ITestService"
            contract="MyNamespace.ITestService" name="CustomBinding_ITestService" />
    </client>
</system.serviceModel>
+3
source share
1 answer

You will need to specify the endpoint configuration name. There is no way around him, as they use the same contract. This is why System.ServiceModel.ClientBase has this constructor argument.

var client = new TestClient("CustomBinding_ITestService");
0
source

Source: https://habr.com/ru/post/1741820/


All Articles