代码中无法访问app.config中的BasicHttpBinding

本文关键字:config 中的 BasicHttpBinding app 访问 代码 | 更新日期: 2023-09-27 18:29:22

我使用服务引用从Visual Studio C#项目连接到几个web服务。其中两个服务引用已经创建并正常工作,其中一个需要花费大量精力才能导入,现在似乎不起作用。

我认为问题出在app.config文件中,因为当我尝试创建客户端时,它出现了"找不到端点元素"错误。

这是app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="RateQuoteSoap">
                    <security mode="Transport" />
                </binding>
                <binding name="RateQuoteSoap1" />
                <binding name="QuoteSoap" />
                <binding name="WebservicePrimusSoapBinding" />
            </basicHttpBinding>
            <customBinding>
                <binding name="QuoteSoap12">
                    <textMessageEncoding messageVersion="Soap12" />
                    <httpTransport />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint
                address="https://webservices.rrts.com/rating/ratequote.asmx"
                binding="basicHttpBinding"
                bindingConfiguration="RateQuoteSoap"
                contract="RoadRunnerService.RateQuoteSoap"
                name="RateQuoteSoap" />
            <endpoint
                address="http://services.echo.com/Quote.asmx"
                binding="basicHttpBinding"
                bindingConfiguration="QuoteSoap"
                contract="EchoService.QuoteSoap"
                name="QuoteSoap" />
            <endpoint
                address="http://services.echo.com/Quote.asmx"
                binding="customBinding"
                bindingConfiguration="QuoteSoap12"
                contract="EchoService.QuoteSoap"
                name="QuoteSoap12" />
            <endpoint
                address="http://api.shipprimus.com/"
                binding="basicHttpBinding"
                bindingConfiguration="WebservicePrimusSoapBinding"
                contract="PrimusService.WebservicePrimusServicePort"
                name="WebservicePrimusServicePort" />
        </client>
    </system.serviceModel>
</configuration>

PrimusService是一个工作不正常的服务,当我尝试像WebservicePrimusServicePortClient serviceClient = new WebservicePrimusServicePortClient("WebservicePrimusServicePort");那样初始化客户端时,完全错误是

System.InvalidOperationException: Could not find endpoint element with name 'WebservicePrimusServicePort' and contract 'PrimusService.WebservicePrimusServicePort'in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this name could be found in the client element.

我还尝试过简单地使用绑定名称和端点名称初始化BasicHttpBinding对象,但没有成功(为了可读性,请使用简短的变量名称)

BasicHttpBinding a = new BasicHttpBinding("QuoteSoap"); // Works fine
BasicHttpBinding b = new BasicHttpBinding("WebservicePrimusSoapBinding"); // Fails
BasicHttpBinding c = new BasicHttpBinding("WebservicePrimusServicePort"); // Fails

它没有为绑定a抛出错误,但绑定b和c失败,并出现错误:

System.Collections.Generic.KeyNotFoundException: No elements matching the key 'WebservicePrimusSoapBinding' were found in the configuration element collection.

代码中无法访问app.config中的BasicHttpBinding

虽然不是一个直接的解决方案,但我最终只是从app.config中获取信息,并在代码中创建自己的BasicHttpBinding和EndpointAddress对象。这更多的是一种解决方法,而不是解决问题,我仍然不知道为什么我不能直接访问app.config中的信息。

我遵循了这个答案中关于如何在不使用app.config文件的情况下使用服务的解决方案。

我创建了类似的BasicHttpBinding

BasicHttpBinding binding = new BasicHttpBinding();
binding.Name = "PrimusServiceBinding"; // Completely Unnecessary

我的终点像

EndpointAddress endpoint = new EndpointAddress("http://api.shipprimus.com/");

并且可以毫无问题地连接到服务并检索信息,甚至可以像我一样提供很少的信息(基本上只是地址)。