Decir que tengo WCF contrato de servicio como esteWCF Duplex Contrato
[ServiceContract(CallbackContract = typeof(ICallback1),
SessionMode = SessionMode.Required)]
public interface IService1
{
// some methods
}
La implementación del servicio tiene InstanceContextMode.Single
conjunto de InstanceContextMode
y ICallback1
es algo así como
public interface ICallback1
{
[OperationContract]
void Report(int someValue);
}
Ahora, en el lado del cliente, que puede tener una clase que implementa ICallback1 como
class Callback1 : ICallback1
{
public void Report(int someValue)
{
// alert client
}
}
y crear la referencia de servicio al cliente como éste
Service1Client serviceClient = new Service1Client(new InstanceContext(new CallBack1()));
que funciona muy bien. Ahora el problema es que tengo algunos clientes que no están interesados en la devolución de llamada así que pensé que no requieren para implementar la interfaz de devolución de llamada para este tipo de clientes, así que probado este
Service1Client serviceClient = new Service1Client(null);
y
Service1Client serviceClient = new Service1Client(new InstanceContext(null));
ambos informaron que el parameter cannot be null
. Mi pregunta es, ¿cómo puedo crear una referencia de servicio sin pasar un objeto de devolución de llamada si el cliente no está interesado en la devolución de llamada? El único requisito es que todos los clientes deben estar hablando con el mismo servicio, pero de lo contrario puedo reestructurar el servicio. Alguna idea ?
EDIT:
también he intentado SessionMode = SessionMode.Allowed
para ServiceContract en lugar de SessionMode.Required
pero eso no ayuda tampoco.
Parece imposible, siempre y cuando sea parte del contrato. –
¿Puede el CallbackContract ser opcional? –
En términos simples, la devolución de llamada se define como una parte del contrato de servicio, esto es constante. Configurar todo lo demás no cambia el contrato, por lo que parece imposible. –