创建具有指定地址的WCF服务客户端,而不指定配置名称

本文关键字:配置 客户端 WCF 地址 创建 服务 | 更新日期: 2023-09-27 18:09:58

是否有一种方法可以在c#中使用指定的端点地址创建WCF服务客户端实例,而无需指定配置名称?

默认情况下,客户端有以下构造函数:

    public ServiceClient() 
    public ServiceClient(string endpointConfigurationName)
    public ServiceClient(string endpointConfigurationName, string remoteAddress)

显然,由于第一个构造函数,存在一个默认配置。我想要的是只指定最终构造函数的第二个参数。现在,我正在努力阅读使用ConfigurationManager的配置元素来弄清楚它,但它似乎非常麻烦。有没有更干净的方法?

创建具有指定地址的WCF服务客户端,而不指定配置名称

我不喜欢使用.config文件中的端点配置。我通常这样做:

        BasicHttpBinding basicbinding = new BasicHttpBinding();
        basicbinding.SendTimeout = TIMEOUT;
        basicbinding.OpenTimeout = TIMEOUT;
        ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx")));

您生成的客户端也应该有一个构造函数,看起来像这样:

public ServiceClient(
    System.ServiceModel.Channels.Binding binding,
    System.ServiceModel.EndpointAddress remoteAddress)
        : base(binding, remoteAddress) {
    }

你可以在没有端点配置的情况下调用这个。

如果你只是想调用一个服务,而不需要了解WCF服务和配置处理的所有知识,在c#中你可以做…

        String url = "http:''somehost:someport''pathToSomeService";
        EndpointAddress address = new EndpointAddress(url);
        Binding binding = new BasicHttpBinding();
        YourClient client = new YourClient(binding, address);
        // Call your client methods
        client.SomeMethod(parm1, parm2);

以上假设您生成了一个服务引用,并且不要求配置信息存在于任何地方,不在生成的服务引用中,不在DLL中,也不在可执行文件中。没有配置。一个也没有。

我在一个真正的独立服务代理dll中使用上述代码。它是独立的,因为它是完全可配置的,不依赖于调用可执行文件来提供任何东西。

好吧,您可以使用默认构造函数,但是您必须手动编写所有配置设置。通过指定配置名称,服务客户端将自动从.config文件中加载配置,您所需要知道的就是使用哪个配置(您可以有多个配置,例如一个用于HTTP,另一个用于Net.Tcp)。remoteAddress,当然,只是告诉WCF在哪里建立连接。

如果您在配置客户端设置时遇到问题,请确保您正在使用WCF服务配置工具。它对服务配置和客户端配置都有效。