-1

Ich habe eine Anforderung, wo ich mehrere parallele Aufrufe an verschiedene Web-Services auf verschiedenen Servern gehostet senden müssen. Ich muss eine Konfigurationsdatei lesen, um zu wissen, wie oft der Anruf getätigt werden muss. Nehmen wir an, es gibt 4 Server und auf jedem Server wird ein Web-Service gehostet. Der konfigurierte Wert ist 4, dann muss ich 4 Aufrufe an jeden Dienst parallel machen. Insgesamt Anrufe wäre 16. Hier ist der Code, die ich getan habe:Ich muss mehrere verschiedene Web-Services parallel aufrufen mit C#

string XmlFile = ConfigurationManager.AppSettings["XMLFile"].ToString(); 
      int num = Convert.ToInt16(ConfigurationManager.AppSettings["NumberOfCalls"]); 

Service service1 = new InfoMsg.Manager.Service(); 
Service service2 = new InfoMsg.Manager.Service(); 
Service service3 = new InfoMsg.Manager.Service(); 
Service service4 = new InfoMsg.Manager.Service(); 

string xmlString = System.IO.File.ReadAllText(XmlFile); 

if (!string.IsNullOrEmpty(xmlString)) 
{ 
    Parallel.For(0, num, i => 
     Parallel.Invoke(() => service1.CheckInXML(xmlString), 
         () => service2.CheckInXML(xmlString), 
         () => service3.CheckInXML(xmlString), 
         () => service4.CheckInXML(xmlString)) 
    ); 
} 

ich tatsächlich zwischen 14 und 16 Anrufe mache so etwas nicht stimmt. Ist das ein richtiger Weg?

+0

Was ist passiert, als Sie es versucht haben? Hat es funktioniert? – Servy

+0

Ja! es funktioniert. Aber ich bin mir nicht sicher, ob ich es richtig mache –

+0

Manchmal sind Anrufe weniger als das, was ich erwarte. Nehmen wir an, der Wert von num ist 4, dann sollten die Gesamtanrufe 16 sein. –

Antwort

1

Um die Frage zu beantworten, ist es genug, wenn Sie die Parallel.Invoke entfernen. Die Parallel.For sollte die Arbeit machen, das ist es, was die Parallel.Für im Wesentlichen tut.

Verwandte Themen