August 2010
Intermediate to advanced
908 pages
26h 22m
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, allows you to create a proxy
on the fly.
Example 1-21. The ChannelFactory<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 the endpoint name from the client config file, 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 to ICommunicationObject ...