Working with Channels
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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access