消费WCF服务时发生异常

时间:2019-10-31 05:42:47

标签: c# wcf soap

我尝试使用wcf服务,但是从C#调用绑定信息时出现错误。错误是“在配置中未找到与关键字匹配的元素”。
你能帮我吗?

我已经检查过,并且绑定的配置名称与app.config文件中的相同。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
WSHttpBinding binding = new WSHttpBinding("bindingconfig name");
EndpointAddress address = new EndpointAddress("endpoint address");

当我尝试调用它时,将引发WSHttpBinding对象绑定形式的异常。

1 个答案:

答案 0 :(得分:0)

请使用客户端代理类来调用服务。
https://docs.microsoft.com/en-us/dotnet/framework/wcf/accessing-services-using-a-wcf-client
如下面的代码段。

ServiceReference1.TestServiceClient client = new ServiceReference1.TestServiceClient();
try
{
    var result = client.GetResult();
    Console.WriteLine(result);
}
catch (Exception)
{
    throw;
}
client.Close();

配置(自动生成)。

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_ITestService" />
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://10.157.13.69:16666/" binding="basicHttpBinding"
            bindingConfiguration="BasicHttpBinding_ITestService" contract="ServiceReference1.ITestService"
            name="BasicHttpBinding_ITestService" />
    </client>
</system.serviceModel>

客户端代理将使用默认的绑定和端点地址。 如果在配置中生成了多个服务端点,则应通过客户端代理的构造函数指定用于通信的服务端点。

ServiceReference1.TestServiceClient client = new ServiceReference1.TestServiceClient(“BasicHttpBinding_ITestService”);

此外,我们还可以使用ChannelFacotry调用该服务,但是它们本质上是相同的。

   Uri uri = new Uri("http://10.157.13.69:16666");
            BasicHttpBinding binding = new BasicHttpBinding();
       ChannelFactory<ICalculator> factory = new ChannelFactory<ICalculator>(binding,new EndpointAddress(uri));
            ICalculator service = factory.CreateChannel();
            try
            {
                var result = service.Add(34.32, 2.34);
                Console.WriteLine(result);

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
        }

    [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double Add(double a, double b);
    }

请随时告诉我是否有什么可以帮忙的。