November 2008
Intermediate to advanced
784 pages
23h 28m
English
You can use channels directly to invoke operations on a service, without ever resorting
to using a proxy class. The ChannelFactory<T> class
(and its supporting types), shown in Example 1-21, enables you
to create a proxy on the fly.
Example 1-21. TheChannelFactory<T> class
public class ContractDescription
{
public Type ContractType
{get;set;}
//More members
}
public class ServiceEndpoint
{
public ServiceEndpoint(ContractDescription contract,Binding binding,
EndpointAddress address);
public EndpointAddress Address
{get;set;}
public Binding Binding
{get;set;}
public ContractDescription Contract
{get;}
//More members
}
public abstract class ChannelFactory : ...
{
public ServiceEndpoint Endpoint
{get;}
//More members
}
public class ChannelFactory<T> : ChannelFactory,...
{
public ChannelFactory(ServiceEndpoint endpoint);
public ChannelFactory(string configurationName);
public ChannelFactory(Binding binding,EndpointAddress endpointAddress);
public static T CreateChannel(Binding binding,EndpointAddress endpointAddress);
public T CreateChannel( );
//More members
}You need to provide the constructor of ChannelFactory<T> with the endpoint. This can be either the endpoint name
from the client config file, or the binding and address objects, or a ServiceEndpoint object. Next, use the CreateChannel( ) method to obtain a reference to the proxy and use its methods.
Finally, close the proxy by either casting it to IDisposable and calling the Dispose( ) method or casting it ...