मेरे पास 30 उप कंपनियां हैं और हर किसी ने अपनी वेब सेवा (विभिन्न तकनीकों के साथ) लागू की है।कई वेब सेवाओं को कॉल करने का सबसे अच्छा तरीका?
मुझे उन्हें एकत्र करने के लिए एक वेब सेवा लागू करने की आवश्यकता है, उदाहरण के लिए, सभी उप कंपनी वेब सेवाओं के पास GetUserPoint(int nationalCode)
नाम के साथ एक वेब विधि है और मुझे अपनी वेब सेवा को लागू करने की आवश्यकता है जो उन सभी को कॉल करेगा और सभी को एकत्र करेगा प्रतिक्रियाएं (उदाहरण के लिए अंक की राशि)।
public abstract class BaseClass
{ // all same attributes and methods
public long GetPoint(int nationalCode);
}
उप कंपनियों वेब सेवाओं में से प्रत्येक के लिए, मैं एक वर्ग है कि इस आधार वर्ग विरासत को लागू करने और अपने स्वयं के GetPoint
विधि को परिभाषित:
यह मेरा आधार वर्ग है।
public class Company1
{
//implement own GetPoint method (call a web service).
}
public class CompanyN
{
//implement own GetPoint method (call a web service).
}
इतना करने के लिए, यह मेरा वेब विधि है:
[WebMethod]
public long MyCollector(string nationalCode)
{
BaseClass[] Clients = new BaseClass[] { new Company1(),//... ,new Company1()}
long Result = 0;
foreach (var item in Clients)
{
long ResultTemp = item.GetPoint(nationalCode);
Result += ResultTemp;
}
return Result;
}
ठीक है, यह काम करता है, लेकिन यह इतनी धीमी गति से है, क्योंकि हर उप कंपनी वेब सेवा विभिन्न सर्वरों पर होस्ट कर रहा है (इंटरनेट पर)।
मैं इस तरह समानांतर कार्यक्रमों की उपयोग कर सकते हैं:
foreach (var item in Clients)
{
Tasks.Add(Task.Run(() =>
{
Result.AddRange(item.GetPoint(MasterLogId, mobileNumber));
}
}
मुझे लगता है कि समानांतर कार्यक्रमों की (और सूत्रण) क्योंकि मेरे समाधान आईओ बाध्य है, इस समाधान के लिए अच्छा नहीं है (यह कहा जाता समानांतर कार्यक्रमों की !? है) (सीपीयू गहन नहीं)!
कॉल करें हर बाहरी वेब सेवा इतनी धीमी है, क्या मैं सही हूँ? प्रतिक्रिया प्राप्त करने के लिए लंबित कई धागे!
मुझे लगता है कि एसिंक प्रोग्रामिंग सबसे अच्छा तरीका है लेकिन मैं एसिंक प्रोग्रामिंग और समांतर प्रोग्रामिंग के लिए नया हूं।
सबसे अच्छा तरीका क्या है? (समानांतर .foreach - async टीएपी - async एपीएम - async ईएपी-थ्रेडिंग)
कृपया मेरे लिए एक उदाहरण लिखें। तब
public abstract class BaseClass
{ // all same attributes and methods
public abstract long GetPoint(int nationalCode);
public async Task<long> GetPointAsync(int nationalCode)
{
return await GetPoint(nationalCode);
}
}
, प्रत्येक ग्राहक के कॉल के लिए कार्य एकत्रित करते हैं:
आपको अपनी सभी मूलभूत बातें मिल गईं। यह एक बहुत अच्छी शुरुआत है। 'समानांतर। फॉरएच 'और' थ्रेड 'जैसी समस्या से पीड़ित है' कार्य '।' वे सीपीयू के लिए अच्छे हैं, आईओ-बाध्य काम नहीं। टीएपी निश्चित रूप से लिखने के लिए सबसे आसान है (आप मूल रूप से अपने वर्तमान पाश को रखते हैं, लेकिन आईओ सामान "थ्रेडलेस" और बहुत स्केलेबल बन जाता है)। एपीएम और ईएपी आसानी से टीएपी ('टास्क.फैक्टरी.फ्रॉमएसिंक' के माध्यम से एपीएम के लिए और 'टास्क कॉम्प्लेशनसोर्स' ईएपी के लिए परिवर्तनीय हैं), ताकि आप टीएपी के साथ जा सकें और एपीएम और ईएपी कॉल में प्लग कर सकें यदि आपका मौजूदा एपीआई प्रदान करता है। –