| Previous | Home | Next |
We provide the ServiceContract attribute with the type of the callback contract and the definition of the callback contract for define a service contract with a callback contract
Example:
interface ISomeCallbackContract
{
[OperationContract]
void OnCallback( );
}
[ServiceContract(CallbackContract = typeof(ISomeCallbackContract))]
interface IMyContract
{
[OperationContract]
void operation1( );
}
When we use such a service endpoint whose contract defines a callback contract, then the client use a proxy that will set up the bidirectional communication and pass the callback endpoint reference to the service. The proxy the client uses must derive from the specialized proxy class DuplexClientBase<T>.
Example of DuplexClientBase<T>:
public interface IDuplexContextChannel : IContextChannel
{
InstanceContext CbInstance
{get;set;}
//More members
}
public abstract class DuplexClientBase<T> :
ClientBase<T> where T : class
{
protected DuplexClientBase(InstanceContext callbackContext);
protected DuplexClientBase(InstanceContext callbackContext,
string EpName);
protected DuplexClientBase(InstanceContext callbackContext,
Binding binding,
EndpointAddress remoteAddress);
protected DuplexClientBase(object CbInstance);
protected DuplexClientBase(object CbInstance,
string endpointConfigurationName);
protected DuplexClientBase(object CbInstance,Binding binding,
EndpointAddress remoteAddress);
public IDuplexContextChannel InnerDuplexChannel
{get;}
//More members
}
When we use use SvcUtil or Visual Studio 2005 to create a proxy class targeting a service with a callback contract then the tools will create a class that derives from DuplexClientBase<T>.
partial class MyContractClient : DuplexClientBase<IMyContract>,IMyContract
{
public MyContractClient(InstanceContext callbackContext) :
base(callbackContext)
{}
public MyContractClient(InstanceContext callbackContext,string EpName) :
base(callbackContext,EpName)
{}
public MyContractClient(InstanceContext callbackContext,Binding binding,
EndpointAddress remoteAddress) :
base(callbackContext,binding,remoteAddress)
{}
//More constructors
public void operation( )
{
Channel.operation( );
}
}
Client implementing the callback contract
class MyClient : IMyContractCallback,IDisposable
{
MyContractClient mypro;
public void CallService( )
{
InstanceContext cn = new Instancecn(this);
mypro = new MyContractClient(cn);
mypro.operation( );
}
public void OnCallback( )
{...}
public void Dispose( )
{
mypro.Close( );
}
}
| Previous | Home | Next |