2014-07-24 46 views
7

SOAP Web Hizmetleri'nde birden çok istekte bulunması gereken çok kullanıcılı bir COM + uygulamasına sahibim. Her SOAP isteği 10'dan 60 saniyeye kadar çıkabilir (bu benim kontrolüm altında değildir). Sorun şu ki, aynı anda 2'den fazla istek yapamıyorum. Örneğin, 3 eşzamanlı isteklere sahip olduğumda, üçüncü istekler sadece ikinci ikincisi bittiğinde başlar. Aynı davranışı bir konsol uygulamasında (sınama amaçlı olarak) aynı Web Hizmeti'ne birden çok eşzamanlı istekte bulunarak izledim ve yine 2 istekle sınırlı kaldım. Aynı sorun çözen bir özellik olduğunu C# istemci üzerinde oldu, ANCAK başka bir dil (C#) ile aynı WebServices tüketmeye çalıştıDelphi SOAP İstemci 2'den fazla eşzamanlı istek tutamaz. Nasıl artar?

:

System.Net.ServicePointManager.DefaultConnectionLimit 

Ben mülkiyet bunu arttı zaman istediğim sayıda eşzamanlı istekleri tutabilirdi. Delphi'de buna benzer bir özellik var mı?

Web Services'i (Delphi XE2) kullanmak için WSDL ithalatçı aracını kullanıyorum. Varsayılan olarak

+0

Bu istekleri yürüten hangi bileşeni kullanıyorsunuz EMKT? Bazı kodları göster. –

cevap

8

Delphi, SOAP isteklerini yapmak için Wininet.dll kullanır, IE aynı DLL'yi kullanır. Bu sınırlama aslında documented'dur.

küçük kod örneği (görünmüyorsa lütfen unutmayın: KB makalesinde SABUN çağrısından önce

  • Kullanım InternetSetOption belirtilen gibi

    • kayıt uyarlamak:

      Sen 2 seçenek var hata denetimi dahil):

      Const 
          INTERNET_OPTION_MAX_CONNS_PER_SERVER = 73; 
          INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74; 
      var 
          MaxConnections : Integer; 
      
      begin 
          MaxConnections := 10; // adapt to your needs 
          InternetSetOption(Nil, INTERNET_OPTION_MAX_CONNS_PER_SERVER, @MaxConnections , SizeOf(MaxConnections)); 
          InternetSetOption(Nil, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, @MaxConnections , SizeOf(MaxConnections)); 
      // do SOAP call 
      end; 
      
  • +0

    Bu kod parçası hile yaptı. Çok teşekkür ederim! – lucasdclopes

    5

    sunucuya comunicate, Delphi SABUN programları Windows Winınet kullanır ve diğer platformlarda Indy (TIdHTTP) ( SOAPHTTPTrans.pas biriminde USE_INDY yönergesine bakınız). [1]

    Sen USE_INDY tanımlayarak Windows üzerinde Indy kullanmayı deneyin ve SOAP kütüphanesi yeniden derlemek olabilir (ancak kendimi bu yüzden bana bilinmeyen yapmak ayrıntılı adımlar yapmadım).

    p.s. Bağlantılı makale, UseNagle öğesinin False olarak ayarlanması gerektiğini de belirtir.

    İlgili konular