Zaman Uyumsuz Çağrılar Yapma ve İşleme

COM nesneleri zaman uyumsuz çağrıyı destekleyebilir. Bir istemci asenkron bir çağrı yaptığında, denetim hemen istemciye geri döner. Sunucu çağrıyı işlerken, istemci başka işler yapabilir. Müşteri artık çağrının sonuçları olmadan devam edemeyince, o zaman çağrının sonuçlarını alabilir.

Örneğin, büyük veya karmaşık bir kayıt kümesi isteği zaman alabilir. İstemci, zaman uyumsuz bir çağrıyla kayıt kümesini isteyebilir ve sonra başka işler yapabilir. Kayıt kümesi kullanılabilir olduğunda, istemci engelleme olmadan hızlı bir şekilde elde edebilir.

İstemciler doğrudan sunucu nesnesi üzerinde zaman uyumsuz çağrılar yapmaz. Bunun yerine, sunucu nesnesinde bir senkron arayüzün asenkron versiyonunu uygulayan bir çağrı nesnesi alırlar. Çağrı nesnesindeki zaman uyumsuz arabirimin adı AsyncInterfaceNamebiçimindedir. Örneğin, bir sunucu nesnesi IMyInterface adlı zaman uyumlu bir arabirim uygularsa, AsyncIMyInterface adlı zaman uyumsuz bir arabirim uygulayan bir çağrı nesnesi olacaktır.

Not

IDispatch veya IDispatch'ü devralan arabirimler için zaman uyumsuz destek mevcut değildir.

 

Zaman uyumsuz çağrıları destekleyen sunucu nesneleri ICallFactory arabirimini uygular. Bu arabirim, belirtilen çağrı nesnesinin bir örneğini oluşturan CreateCalltek bir yöntemi kullanıma sunar. İstemciler, bir nesnenin zaman uyumsuz çağrıyı destekleyip desteklemediğini belirlemek için ICallFactory sorgulayabilir.

Zaman uyumlu arabirimdeki her yöntem için, karşılık gelen zaman uyumsuz arabirim iki yöntem uygular. Bu yöntemler, zaman uyumlu yöntemin adına Begin_ ve Finish_ ön eklerini ekler. Örneğin, ISimpleStream adlı bir arabirimin Read yöntemi varsa, AsyncISimpleStream arabiriminin bir Begin_Read ve Finish_Read yöntemi olur. Zaman uyumsuz bir çağrı başlatmak için istemci Begin_ yöntemini çağırır.

Bir sunucu nesnesi uyguladığınızda, nesnenin uyguladığı her arabirim için bir çağrı nesnesi sağlamanız gerekmez. Sunucu nesnesi ICallFactory arabirimini uygular ve standart marshaling kullanırsa, sunucu tarafında çağrı nesnesi olmasa bile, hazırlanan istemci her zaman bir vekil çağrı nesnesi alabilir. Bu proxy, Begin_ yöntemini zaman uyumlu bir çağrı olarak sıralar, sunucu çağrıyı zaman uyumlu olarak işler ve istemci Finish_ yöntemini çağırarak out parametrelerini alabilir.

Buna karşılık, bir istemci, sunucu tarafında bir çağrı nesnesi bulunan bir arabirimde sıralanmış eşzamanlı bir çağrı yaparsa, sunucu çağrıyı her zaman zaman uyumsuz olarak işler. İstemci zaman uyumlu yöntemden aldığı aynı out parametrelerini ve aynı dönüş değerini alacağı için bu davranış istemci tarafından görülmeyecektir.

Her iki durumda da, istemci ve sunucu arasındaki etkileşim, çağrı zaman uyumluymış gibi sıralanır: Zaman uyumlu ve zaman uyumsuz proxy'lerin çıkışı, karşılık gelen saplamaların çıktısı gibi ayırt edilemez. Bu davranış, hem istemcilerin hem de sunucuların programlama modelini büyük ölçüde basitleştirir. Bir sunucu nesnesi ICallFactoryuygularsa, kurulmuş istemci kullanılamayabilecek bir çağrı nesnesi oluşturmayı denemek zorunda kalmaz; istemci için her zaman bir çağrı nesnesi kullanılabilir.

İstemci ve sunucu aynı dairede olduğunda, sunucu nesnesi istemcinin yaptığı çağrıyı işler. Bir çağrı nesnesi kullanılamıyorsa, istemcinin zaman uyumlu arabirimi açıkça edinmesi ve zaman uyumlu bir çağrı yapması gerekir.

Daha fazla bilgi için aşağıdaki konulara bakın: