Допустим, у меня есть такой контракт службы WCF
[ServiceContract(CallbackContract = typeof(ICallback1),
SessionMode = SessionMode.Required)]
public interface IService1
{
// some methods
}
Реализация службы имеет InstanceContextMode.Single
, установленное для InstanceContextMode
и ICallback1
- это что-то вроде
public interface ICallback1
{
[OperationContract]
void Report(int someValue);
}
Теперь на стороне клиента я могу иметь класс, который реализует ICallback1, например
class Callback1 : ICallback1
{
public void Report(int someValue)
{
// alert client
}
}
, и я создаю ссылку на клиентскую службу, подобную этой
Service1Client serviceClient = new Service1Client(new InstanceContext(new CallBack1()));
, которая отлично работает. Теперь проблема в том, что у меня есть клиенты, которые не заинтересованы в обратном вызове, поэтому я решил, что мне не нужно реализовывать интерфейс обратного вызова для таких клиентов, поэтому я попробовал этот
Service1Client serviceClient = new Service1Client(null);
и
Service1Client serviceClient = new Service1Client(new InstanceContext(null));
, оба сообщили, что параметр не может быть нулевым
. Мой вопрос в том, как я могу создать ссылку на службу без передачи объекта обратного вызова, если клиент не заинтересован в обратном вызове. Единственное требование - все клиенты должны разговаривать с одной и той же службой, но в противном случае я могу реструктурировать службу. Есть мысли?
РЕДАКТИРОВАТЬ:
Я также пробовал SessionMode = SessionMode. Разрешено
для ServiceContract вместо SessionMode.Required
, но это тоже не помогло.