2012-10-29 79 views
0

我目前正在开发一个WCF客户端来与一组WCF服务引用进行交互。我正在用C#开发。创建wcf客户端帮助

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

我有其他替代方案对我开放吗?我正在考虑使用ServiceModel库中的ServiceClient类。

虽然我有点困惑,例如与端点相关的请求和响应对象,在哪里创建了这些对象,或者它们是如何创建的?在之前的项目中,我使用了T4映射和DTO,但是我觉得这些都已经过时了。我确实喜欢我可以在不同的服务端点之间共享同一个对象。我的目标是创建一个通过自定义书写代理进行通信的自定义客户端对象。我想就此做一些指示。

回答

0

跟一个WCF服务(终点),你需要知道的三件事(ABC):在地址端点的,在结合它使用和合同的在通信中使用。如果您拥有以上三件事情,则不需要使用任何工具与服务进行交互。

地址只是端点的URI。该绑定由摘要System.ServiceModel.Channels.Binding类的一个实例(例如System.ServiceModel.BasicHttpBinding,System.ServiceModel.WSHttpBinding等)表示。合同通常由装饰有[ServiceContract]属性的界面表示。如果您拥有所有这三个,则可以使用ChannelFactory<T>类创建自定义代理,如下所示。

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)); 
} 
+0

我有端点和绑定,但对合同不太确定,这是我创建的对象吗?而请求和响应对象,我怎么知道这些等类型? – amateur

+0

如果您拥有该服务,则可以将该服务的[ServiceContract]界面复制到客户端。这就是你如何得到这种类型。诸如svcutil或“Add Service Reference”这样的工具的作用是生成一个用[ServiceContract]装饰的界面,该界面与服务中使用的界面兼容,但如果您已经拥有该界面,则可以使用相同的类型。 – carlosfigueira