मैं किसी उपकरण शोकहारा वेब सेवाओं का उपयोग करता है है और मैं अपने अनुरोध/प्रतिक्रिया कार्यक्षमता का इस्तेमाल किया है जिससे मैं इसे एक कमांड HTTP GET के माध्यम से भेज सकते हैं और यह उचित XML के साथ प्रतिक्रिया करता है।मैं इंडी साथ पुश नोटिफिकेशन कैसे प्राप्त होगा?
मैं अब डिवाइस के मवाद सूचनाओं का उपयोग करने की आवश्यकता है। मैं ऊपर जिससे मैं प्रासंगिक HTTP URL और जिसमें प्रतिक्रिया जगह धारा के साथ TIdHTTP.Get
प्रक्रिया की आपूर्ति के रूप में ही दृष्टिकोण की कोशिश की है, लेकिन यह काम करने के लिए प्रतीत नहीं होता। Get
करने के लिए कॉल वापस नहीं आती है। यह मुझे समझ में आता है कि पुश नोटिफिकेशन के साथ आप डिवाइस और प्रोग्राम के बीच संचार की HTTP स्ट्रीम खोल रहे हैं और यह कनेक्शन बंद होने तक स्ट्रीमिंग के लिए खुला रहेगा।
मेरी समस्या हालांकि मुझे नहीं पता कि अगर Get
विधि वापस नहीं आती है तो मुझे स्ट्रीम से एक्सएमएल कैसे प्राप्त किया जाए। यह के रूप में यदि कार्यक्रम लटका दिया गया है। मैंने डिवाइस के साथ जीईटी के माध्यम से संचार और थ्रेड में स्ट्रीम के पढ़ने के माध्यम से संचार करने की कोशिश की है ताकि यह अपने आप जारी रख सके और फिर मेरा मुख्य एप्लीकेशन परिणामस्वरूप एक्सएमएल की जांच कर सके लेकिन यह भी काम नहीं करता है।
मुझे आश्चर्य है कि क्या मैं इसे जटिल बना रहा हूं और यदि कोई आसान समाधान है। जब मैं बस एक अनुरोध भेजता हूं और प्रतिक्रिया प्राप्त करता हूं, तो यह ठीक काम करता है; यह केवल पुश स्ट्रीमिंग है कि मैं काम नहीं कर सकता।
यदि मैं इंटरनेट एक्सप्लोरर में यूआरएल का उपयोग करता हूं तो मैं एक्सएमएल को वापस देख सकता हूं और साथ ही साथ "व्यस्त" लोगो लगातार चल रहा है यह इंगित करता है कि स्ट्रीम खुली है।
मैंने अपने ब्राउज़र फ़ायरफ़ॉक्स मोज़िला 20.0.1 के माध्यम से आदेश चलाया है और देखा है कि पुश अनुरोध और प्रतिक्रिया के लिए वायरसहार्क कैप्चर करता है।
GET /elite/notifications/stream?resume=2013-05-06T00:00:00Z HTTP/1.1
Host: 192.168.10.10
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
अनुरोध मैं निम्नानुसार है डेल्फी में क्या करना कोशिश कर रहा हूँ:
if fEventStream = nil then
fEventStream := TStringStream.Create('');
try
TapItem.fHTTP.Get(TapItem.I2IReaderIP+'/elite/notifications/stream?resume=2013-05-01T00:00:00Z',fEventStream);
TapItem.fEventXML := fEventStream.ReadString(fEventStream.Size);
except
on e:exception do begin
ShowMessage(e.message)
end;
end;
मैं भी TidTCPConnection
साथfTCPConn.IOHandler.Writeln(TapItem.I2IReaderIP+I2I_PUSH_EVENT+'2013-05-01T00:00:00Z');
While not Terminated do begin
XMLString := XMLString + fTCPConn.IOHandler.Readln;
end;
में किसी भी सहायता की कोशिश की है HTTP हिस्सा नीचे दिखाया गया है इस मामले की सराहना की जाएगी।
समाधान
मेरे मामले बस कॉल की शुरुआत करने के लिए मिलता कीवर्ड जोड़ने में काम किया। मैं मान लिया टीसीपी कनेक्शन घटक क्या कार्रवाई के ज्ञान की आवश्यकता (यानी GET डाल आदि) यह तुम क्या करना चाहते हैं, यह नहीं कर सकते मेरे मन पढ़ने है, भावना
fTCPConn.IOHandler.Writeln('GET ' + TapItem.I2IReaderIP+I2I_PUSH_EVENT+'2013-05-01T00:00:00Z');
While not Terminated do begin
XMLString := XMLString + fTCPConn.IOHandler.Readln;
end;
संकेत: स्टैक ओवरफ्लो पर, आप अपना समाधान एक उत्तर के रूप में जोड़ सकते हैं (और इसे स्वीकार कर सकते हैं) – mjn