2011-03-16 16 views
6

Hizmetin uygulanması InstanceContextMode ve ICallback1 için InstanceContextMode.Single kümesi vardır buWCF Dubleks Sözleşme

[ServiceContract(CallbackContract = typeof(ICallback1), 
SessionMode = SessionMode.Required)] 
public interface IService1 
{ 
    // some methods 
} 

gibi WCF hizmet sözleşmesi istemci tarafında Şimdi

public interface ICallback1 
{ 
    [OperationContract] 
    void Report(int someValue); 
} 

gibi bir şey olduğunu varsayalım, ben olabilir Bir sınıf,

class Callback1 : ICallback1 
{ 
    public void Report(int someValue) 
    { 
     // alert client 
    } 
} 
gibi ICallback1'i uygular.

ve ben gayet iyi çalışıyor bu

Service1Client serviceClient = new Service1Client(new InstanceContext(new CallBack1())); 

gibi müşteri hizmeti referans oluşturmak. Şimdi problem Böyle müşterileri için geri arama arabirimini uygulamak gerekmez ben de düşündüm callback'inde ilgilenmiyor bazı müşterimiz var bu yüzden denedim ki bu

Service1Client serviceClient = new Service1Client(null); 

ve

Service1Client serviceClient = new Service1Client(new InstanceContext(null)); 

her ikisi de parameter cannot be null bildirmiştir. Sorum şu, istemcinin geri arama ile ilgilenmediği durumlarda geri arama nesnesini geçmeden nasıl bir hizmet başvurusu oluşturabilirim. Tek gereklilik, tüm müşterilerin aynı hizmetle konuşması gerektiğidir, ancak aksi halde hizmeti yeniden yapılandırabilirim. Düşüncesi olan var mı ?

DÜZENLEME: Ben de SessionMode.Required yerine ServiceContract için SessionMode = SessionMode.Allowed denedi ancak ya da yardımcı olmadı

.

+0

Sözleşmenin bir parçası olduğu sürece imkansız görünüyor. –

+0

CallbackContract isteğe bağlı olabilir mi? –

+0

Basitçe, Geri Arama Servis Sözleşmesinin bir parçası olarak tanımlanmıştır, bu sabittir. Her şeyin konfigüre edilmesi sözleşmeyi değiştirmez, bu yüzden imkansız görünüyor. –

cevap

2

Geçici çözüm: CallbackContract'ı IService1'den kaldırın. IService1 devralan ve CallbackContract içeren IDuplexService1 oluşturun. Service1Client uygulamasının IDuplexService1 olmasını sağlayın. Ana bilgisayarı başlatırken, hem IService1 hem de IDuplexService1 için ServiceHost.AddServiceEndpoint numaralı telefonu arayın.