Скажем, у меня есть контракт на обслуживание 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));
оба сообщили, что parameter cannot be null
. У меня вопрос, как я могу создать ссылку на службу, не передавая объект обратного вызова, если клиент не заинтересован в обратном вызове. Единственное требование - все клиенты должны общаться с одним и тем же сервисом, но в противном случае я могу реструктурировать сервис. Есть мысли?
EDIT:
Я также попытался SessionMode = SessionMode.Allowed
для ServiceContract вместо SessionMode.Required
, но это тоже не помогло.