Я успешно реализовал шаблон обратного вызова WCF в своем коде, и теперь я хочу реализовать асинхронный обратный вызов. Вот мой код интерфейса:
[ServiceContract(Name = "IMessageCallback")]
public interface IMessageCallback
{
[OperationContract(IsOneWay = true)]
void OnMessageAdded(string message, DateTime timestamp);
}
[ServiceContract(Name="IMessageCallback")]
public interface IAsyncMessageCallback
{
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginOnMessageAdded(string msg, DateTime timestamp, AsyncCallback callback, object asyncState);
void EndOnMessageAdded(IAsyncResult result);
}
[ServiceContract(CallbackContract = typeof(IMessageCallback))]
public interface IMessage
{
[OperationContract]
void AddMessage(string message);
}
Чтобы использовать синхронный обратный вызов, я объявил свой канал и конечную точку следующим образом:
DuplexChannelFactory<IMessage> dcf = new DuplexChannelFactory<IMessage>(new InstanceContext(this), "WSDualHttpBinding_IMessage");
<endpoint address="net.tcp://localhost:8731/Message/"
binding="netTcpBinding"
contract="WCFCallbacks.IMessage" name="WSDualHttpBinding_IMessage">
У меня проблемы с получением правильной комбинации конечной точки и канала для использования асинхронного обратного вызова. Может ли кто-нибудь указать мне правильное направление?
Кроме того, когда выполняется следующая строка кода:
OperationContext.Current.GetCallbackChannel<IAsyncMessageCallback>();
Я получаю следующую ошибку:
Unable to cast transparent proxy to type 'WCFCallbacks.IAsyncMessageCallback'