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

时间:2011-09-29 15:27:33

标签: c# wcf

有没有办法在C#中使用指定的端点地址创建WCF服务客户端实例而不指定配置名称?

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

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

显然,由于第一个构造函数,有一个默认配置。我想要的是只指定最终构造函数的第二个参数。现在,我正在努力阅读使用ConfigurationManager来解决它的配置元素,但它看起来非常麻烦。有更清洁的方式吗?

4 个答案:

答案 0 :(得分:9)

我不想在.config文件中使用端点配置。我通常做这样的事情:

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

答案 1 :(得分:6)

您生成的客户端也应该有一个如下所示的构造函数:

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

您可以在没有端点配置的情况下调用此方法。

答案 2 :(得分:3)

如果你想实际上只是想要调用服务而不必了解有关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中使用上述内容。它是真正意义上的独立,因为它完全可配置,不依赖于调用可执行文件来提供任何东西。

答案 3 :(得分:1)

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

如果您自己配置客户端设置时遇到问题,请确保使用的是WCF服务配置工具。它适用于服务配置和客户端配置。