InstanceContext предоставляет ChannelFactory содержит UserObject, который не реализует CallbackContractType
Im пытается получить дуплексную связь WCF, работающую с Im, поскольку я продолжаю получать "InstanceContext, предоставляемый ChannelFactory, содержит UserObject, который не реализует CallbackContractType"
Я знаю, что есть другие сообщения по этому вопросу, но не мог связать их с моей точной проблемой, поэтому подумал, что я отправлю себя.
вот мой код.
Я включил только биты, которые я думаю, актуальны, но, пожалуйста, дайте мне знать, если вам что-нибудь понадобится еще.
хост-интерфейс определения
[ServiceContract(CallbackContract = typeof(IDataCollectorCallback), SessionMode = SessionMode.Required)]
public interface IDataCollector
{
[OperationContract(IsOneWay = true)]
void GetData();
}
public interface IDataCollectorCallback
{
[OperationContract(IsOneWay = true)]
void returnData();
}
реализация сервиса
public class DataCollector : IDataCollector
{
public void GetData()
{
Console.WriteLine("Getting data");
Console.WriteLine("Waiting");
System.Threading.Thread.Sleep(10000);
Console.WriteLine("Sending Data back");
Callback.returnData();
}
IDataCollectorCallback Callback
{
get
{
return OperationContext.Current.GetCallbackChannel<IDataCollectorCallback>();
}
}
}
клиентский код.
class Program
{
static void Main(string[] args)
{
// while (true)
//{
Console.WriteLine("Press enter to trigger data collection");
Console.ReadLine();
InstanceContext context = new InstanceContext(new MyCallback());
AshService.DataCollectorClient svc = new AshService.DataCollectorClient(context);
svc.GetData();
Console.WriteLine("awaiting data coming back");
Console.ReadLine();
//}
}
}
class MyCallback : IDataCollectorCallback
{
public MyCallback()
{
}
public void returnData()
{
Console.WriteLine("Got Data back from the server");
}
}
чтобы получить ссылку на интерфейс IDataCollector, я включил ссылку на dll в проект хоста. Мне интересно, в этом ли моя проблема. Нужно ли redclare интерфейс обратного вызова в клиентском приложении?
пожалуйста, дайте мне знать, если вам потребуется что-нибудь еще.
вид С уважением
Ясень
2 ответов
извинения.
Я разработал ответ.
моя проблема заключалась в том, что я ссылался на dll, содержащую интерфейс обратного вызова.
что я должен был сделать это....
class MyCallback : AshService.IDataCollectorCallback
спасибо
Ясень
потребовалась бы вечность, чтобы понять это. Я оставил интерфейс в объявлении класса обратного вызова, когда скопировал его из примера кода.