Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建wcf客户端协助_C#_Wcf_Soap_Service Reference_Wcfserviceclient - Fatal编程技术网

C# 创建wcf客户端协助

C# 创建wcf客户端协助,c#,wcf,soap,service-reference,wcfserviceclient,C#,Wcf,Soap,Service Reference,Wcfserviceclient,我目前正在开发一个WCF客户端,以便与一组WCF服务引用进行交互。我在c#发展 我不想遵循必须使用svc util生成服务引用或手动向类库添加服务引用的方法 我还有其他选择吗?我正在考虑在ServiceModel库中使用ServiceClient类 但是我有点困惑,例如,与端点相关的请求和响应对象,它们是在哪里创建的,或者是如何创建的?在以前的一个项目中,我使用了T4映射和DTO,但我觉得这些都是多余的。我确实希望我可以在不同的服务端点之间共享同一个对象。这里我的目标是创建一个通过自定义编写的代

我目前正在开发一个WCF客户端,以便与一组WCF服务引用进行交互。我在c#发展

我不想遵循必须使用svc util生成服务引用或手动向类库添加服务引用的方法

我还有其他选择吗?我正在考虑在ServiceModel库中使用ServiceClient类

但是我有点困惑,例如,与端点相关的请求和响应对象,它们是在哪里创建的,或者是如何创建的?在以前的一个项目中,我使用了T4映射和DTO,但我觉得这些都是多余的。我确实希望我可以在不同的服务端点之间共享同一个对象。这里我的目标是创建一个通过自定义编写的代理进行通信的自定义客户端对象。我想了解这方面的一些指导。

要与WCF服务(端点)交谈,您需要了解三件事(ABC):端点的地址、它使用的绑定以及通信中使用的契约。如果您拥有这三项功能,则不需要使用任何工具与服务交互

地址只是端点的URI。绑定由抽象的
System.ServiceModel.Channels.binding
类的一个实例表示(例如
System.ServiceModel.BasicHttpBinding
System.ServiceModel.WSHttpBinding
等等)。合同通常由一个用
[ServiceContract]
属性修饰的接口表示。如果您拥有这三个类,则可以使用
ChannelFactory
类创建自定义代理,如下所示

public static void TalkToService(Binding binding, Uri endpointAddress) {
    // Assuming that the service contract interface is represented by ICalculator
    var factory = new ChannelFactory<ICalculator>(binding, new EndpointAddress(endpointAddress));
    ICalculator proxy = factory.CreateChannel();
    Console.WriteLine(proxy.Multiply(45, 56));
}
publicstaticvoidtalktoservice(绑定绑定,uriendpointaddress){
//假设服务契约接口由ICalculator表示
var factory=newchannelfactory(绑定,newendpointaddress(EndpointAddress));
ICalculator proxy=factory.CreateChannel();
控制台写线(代理乘法(45,56));
}

我有端点和绑定,但对契约不太确定,这是我创建的对象吗?以及请求和响应对象,我如何知道这些对象的类型等?如果您拥有该服务,您可以将[ServiceContract]接口从该服务复制到客户端。你就是这样得到这个类型的。svcutil或“添加服务引用”等工具所做的是生成一个用[ServiceContract]修饰的接口,该接口与服务中使用的接口兼容,但如果您已经有了该接口,则可以使用相同的类型。