如何在共享库中包装WCF客户端

时间:2014-10-24 23:14:56

标签: c# wcf

我编写了一个暴露以下方法的WCF服务:

byte[] convertToPDF(byte[] fileToConvert)

现在我想创建一个共享库来包装该方法,例如

List<stream> convertToPDF(List<stream> filesToConvert)

List<string> convertToPDF(List<string> filePathsToConvert)

我可以使用svcutil.exe程序构建一个简单的客户端,并从Console应用程序运行此客户端。但是,当我在共享库中调用构造函数时,使用相同的代码失败。

public class Client
{
    private DocToPDF client; 

    public Client()
    {
        client = new DocToPDFClient();  // I fail here          
    }
}

这是例外:

Could not find default endpoint element that references contract 'IDocToPDF' 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 contract 
could be found in the client element.

此消息对我没有意义,因为相同的代码可以从控制台应用程序运行,但不能作为共享库运行。请指教

1 个答案:

答案 0 :(得分:1)

在WCF中,您不能只创建公共类的实例。 你应该使用“ChannelFactory”。

在WCF中创建实例的方式(使用ChannelFactory)就像这个例子:

ChannelFactoryClient.ServiceReference1.DocToPDF client = ChannelFactory<ChannelFactoryClient.ServiceReference1.DocToPDF>.CreateChannel(new NetTcpBinding(), new EndpointAddress("net.tcp://..."));

在WCF中,您有两种方法可以共享您的公共dll。

  1. 您可以将“元数据”从服务器端传递到客户端。 此选项将在客户端创建代理类。您在此类上执行的方法实际上将在服务器端执行(如预期的那样)。要使用此选项,请按these steps

  2. 使用Channel Factory创建代理类。 此选项将在客户端创建代理实例,因此每个方法都将在服务器端执行。 (与上面的代码相反,它创建一个实例并在客户端执行它的方法)。

  3. 要使用ChannelFactory初始化实例,只需按照these steps