Ara katman yazılımı API hatalarını giderme

Çoğu ara katman yazılımı API'si bir SdvResult nesnesi döndürür. İşlem başarılı olursa bu nesne, beklenen sonuç nesnesini içerir. Başarısızlık durumunda bu nesne, beklenmeyen bir davranışı veya hata durumunu belirten bir SdvStatus nesnesi içerir. Bu durum genellikle Internal, Unavailable veya DataLoss gibi bir hata koduyla tanımlanır.

Bu sayfa, söz konusu hata kodlarıyla ilgili sorunları gidermenize yardımcı olur.

Kayıt ve oluşturma hatalarını giderme

Kayıt ve oluşturma hataları genellikle geçersiz bir hizmet oluşturmaya veya kaydetmeye çalıştığınızda ortaya çıkar.

İkinci hizmet oluşturulamıyor

Hata:

Internal hata.

Neden:

Aynı hizmet paketi örneğini (ad ve örnek kimliği) iki kez kaydetmeye çalışıyorsunuz.

Düzeltme:

Aynı hizmet paketi örneğini (ad ve örnek kimliği) iki kez kaydetmeye çalışmayın.

Yinelenen hizmet paketi silinemiyor

Hata:

Status(-3, EX_ILLEGAL_ARGUMENT)

Neden:

Mevcut olmayan, yinelenen bir hizmet paketini silmeye çalışıyorsunuz.

Düzeltme:

Mevcut olmayan yinelenen bir hizmet paketini silmeye çalışmayın.

Mesaj göndermek için yayıncı örneği alınamıyor

Hata:

take_publisher çağrısı none değerini döndürür.

Neden:

Aynı hizmet paketi örneğinden aynı varyant için take_publisher yöntemini iki kez çağırdınız.

Düzeltme:

Aynı hizmet paketi örneğinden aynı varyant için take_publisher yöntemini iki kez çağırmayın.

Subscriber, Observer, History veya InstantReader oluşturulamıyor

Hata:

Unavailable hata.

Neden:

Mevcut olmayan veya kaydı silinmiş bir yayıncı için Subscriber, Observer, History veya InstantReader oluşturmaya çalıştınız.

Düzeltme:

Yayıncı için Subscriber, Observer, History veya InstantReader oluşturmaya çalışmadan önce yayıncının mevcut olduğunu veya kayıtlı olduğunu doğrulayın.

RPC istemcisi oluşturulamıyor

Hata:

Unavailable hata

Neden:

Mevcut olmayan veya kayıtlı olmayan bir sunucu birimi adı için RPC istemcisi oluşturmaya çalıştınız.

Düzeltme:

RPC istemcisini oluşturmadan önce sunucunun mevcut ve kayıtlı olduğunu doğrulayın.

İletişim hatalarını giderme

İletişim hataları, bir hizmet yürütüldükten ve diğer hizmetlerle iletişim kurmaya başladıktan sonra ortaya çıkabilir.

Yayıncı kaydının iptaliyle ilgili sorunları giderme

Bir yayıncı, okuyucuları hâlâ aktifken kaydını iptal ederse hatalar oluşabilir.

Abone'nin read_next_messages işlevi boş listeler döndürüyor

Hata:

read_next_messages başarılı olur ancak boş listeler döndürür.

Neden:

Okuyucuları etkin durumdayken yayıncının kaydı iptal edildi.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncının kaydı silinir ve yeni mesaj olmaz.

Gözlemcinin sonraki işlemi dahili hata döndürüyor

Hata:

next, Internal hatası döndürür.

Neden:

Okuyucuları etkin durumdayken yayıncının kaydı iptal edildi.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncı gitmiştir ve yeni mesaj yoktur.

Geçmişin read_from_history yöntemi yeni mesajları döndürmüyor

Hata:

read_from_history yeni mesaj döndürmez, yalnızca eski mesajları döndürür.

Neden:

Okuyucuları etkin durumdayken yayıncının kaydı iptal edildi.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncı gitmiştir ve yeni mesaj yoktur.

InstantReader read_latest_message dahili hata döndürüyor

Hata:

read_latest_message, Internal hatası döndürür.

Neden:

Okuyucuları etkin durumdayken yayıncının kaydı iptal edildi.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı kullanılamıyorsa yayıncı gitmiştir ve yeni mesaj yoktur.

Boş mesaj sırasıyla ilgili sorunları giderme

Boş bir mesaj sırasından okuma yapılmaya çalışıldığında hatalar oluşabilir.

Abone için read_next_messages boş bir liste döndürür.

Hata:

read_next_messages, boş listeyi başarıyla döndürür.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı mevcutsa yayıncı etkindir ve yeni mesaj yoktur.

Gözlemcinin sonraki işlemi dahili hata döndürüyor

Hata:

next, Internal hatası döndürür.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı mevcutsa yayıncı etkindir ve yeni mesaj yoktur.

Geçmişin read_from_history yöntemi yeni mesajları döndürmüyor

Hata:

read_from_history, boş listeyi başarıyla döndürür.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı mevcutsa yayıncı etkindir ve yeni mesaj yoktur.

InstantReader read_latest_message dahili hata döndürüyor

Hata:

read_latest_message, Internal hatası döndürür.

Neden:

Yayıncı etkin ancak mesaj göndermemiş.

Düzeltme:

Kullanılabilirlik akışıyla bir abone veya geçmiş kullanın. Kullanılabilirlik akışının son mesajı mevcutsa yayıncı etkindir ve yeni mesaj yoktur.

Arabellek taşması veya veri kaybı sorunlarını giderme

Yayıncı, okuyucunun tüketebileceğinden daha hızlı mesaj gönderdiğinde hatalar oluşabilir.

Taşmadan sonra abonenin ilk okuma işlemi DataLoss hatası döndürür

Hata:

read_next_messages, DataLoss hatası döndürür.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı mesaj gönderiyor.

Düzeltme:

Olası düzeltmeler şunlardır:

  • VSIDL mimari tanımınızda yayıncı halka arabelleğini capacity artırın. Böylece sıra, abone okumadan önce mesaj patlamalarını emebilir.
  • Abone tarafında mesajları daha sık kullanın veya yayıncı mesaj hızını azaltın.
  • Hizmetinizin yalnızca en son mesaj değerine ihtiyacı varsa ve her ara güncellemeyi işlemesi gerekmiyorsa Subscriber yerine InstantReader kullanın.

Taşmadan sonra gözlemcinin ilk sonraki işlemi DataLoss hatası döndürür

Hata:

next, DataLoss hatası döndürür.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı mesaj gönderiyor.

Düzeltme:

Olası düzeltmeler şunlardır:

  • Yayıncı daha yavaş bir hızda yayın yapar. Örneğin, en son mesajın zaman damgasını içeren bir değişkeniniz olabilir. Geçerli zaman, son yayınlama zamanı ile delta toplamından küçükse mesajı yayınlamazsınız. Bu mekanizma kullanılarak delta başına en fazla bir mesaj yayınlanır.

  • Tüketici, gözlemci yerine InstantRead nesnesi kullanıyor. InstantRead nesnesi, taşma hataları döndürmez ve her zaman son mesajı döndürür. Yalnızca son mesaj sizin için önemliyse gözlemci yerine InstantRead nesnesi kullanabilirsiniz.

  • Tüketici, örnekleme uygular. Çözümünüzde, mesajları gözlemcinin (01) okuyabileceğinden daha hızlı yayınlayan bir yayıncı (P1) varsa yayınlama ve okuma hızındaki farkı karşılamak için yeni bir yayıncı (P2) ve gözlemci (02) oluşturabilirsiniz.

    Örneğin, P1'in her 10 ms'de bir mesaj yayınladığını ancak O1'in her 100 ms'de yalnızca bir mesaj okuyabildiğini ve kalan dokuz mesajı bıraktığını varsayalım. Tutarsızlığı gidermek için aşağıdaki adımları uygulayan bir çözüm oluşturun:

    1. P1, O2'ye mesaj yayınlar.
    2. O2 bir mesajı okur ve dokuz mesajı siler.
    3. O2, okunan mesajı P2'ye gönderir.
    4. P2, okunan bir mesajı O1'e gönderir.
    5. O1, her on saniyede bir mesaj okur.

    Aşağıdaki örnek kodda bu örnekleme senaryosunun nasıl uygulanacağı gösterilmektedir:

    int discarded_message = 10;
    
    while (true) {
    message m = O2.read_message();
    if discarded_message == 10 {
      discarded_message = 0;
      P2.publish(m);
    } else {
     discarded_message ++;
    }
    }
    

Geçmişteki okumalar eksik

Hata:

Geçmiş kopyalanmadan önce mesaj kayboldu. Okuma sırasında doğrudan hata bildirimi yok.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı mesaj gönderiyor.

Düzeltme:

Olası düzeltmeler şunlardır:

  • VSIDL mimari tanımınızda yayıncı halka arabelleğini capacity artırın. Böylece History, okuyucunuzun yoklama aralığı için yeterli sayıda son mesajı saklar.
  • History kaynağından daha sık okuyun veya yayıncının mesaj gönderme hızını azaltın.

InstantReader yalnızca son mesajı okur

Hata:

Geçmiş kopyalanmadan önce mesaj kayboldu. Okuma sırasında doğrudan hata bildirimi yok.

Neden:

Yayıncı, okuyucunun tüketebileceğinden daha hızlı mesaj gönderiyor.

Düzeltme:

Yok

RPC istemcisi bir yöntem çağırıyor ve yöntem kullanılamıyor

Hata:

Yöntem çağrısı Unavailable hatasıyla başarısız oluyor.

Neden:

SDV, sunucu adını bilmiyor ve Unavailable değerini döndürüyor. Hizmet keşfi geçerli bir sunucu adı döndürmezse ara katman yazılımı bu hatayı döndürür.

Düzeltme:

İstemcinin kullanmak istediği arayüz için server tanımlayan bir hizmet paketi başlatın.

Sunucu tarafı uygulama, SdvStatus hatası döndürüyor

Hata:

Sunucu tarafı uygulama, SdvStatus hatası (ör. SdvStatusCode::NotFound) içeren bir SdvResult döndürür. Hata, çağrıyı yapan istemciye geri iletilir.

Neden:

SDV ve istemci ile sunucu arasındaki iletişim sistemi beklendiği gibi çalışıyor ancak istemci, sunucuda hatayı tetikleyen bir istekte bulunuyor.

Düzeltme:

İstemciyle geçerli bir istekte bulunun veya sunucuyu bu isteklere başarıyla yanıt verecek şekilde düzeltin.