Avatar billede mungojerrie Nybegynder
28. februar 2005 - 22:11 Der er 5 kommentarer og
1 løsning

threadpool - mulig løsning ?

Hej

Jeg er lidt ny indenfor C# og .net bibliotekerne så jeg søger egentlig bare lidt råd og vejledning.

Jeg har følgende scenarie:

En mappe der bliver overvåget for nye xml dokumenter
- hvis der findes et xml dokument, så send den via soap til modtager og vent på svar fra modtager.
- hvis modtaget korrekt - flyt xml dokument til anden mappe og skriv til log - ellers flyt xml doc til anden mappe og skriv til log.

Der kan ligge mange xml dokumenter i den overvågne mappe, hvorfor jeg tror det er nødvendigt med en threadpool eller lignende styring af mit program, fordi der netop skal ventes på svar fra modtager om afsendelsen er gået igennem.

Så kort og godt - kan threadpool klassen være en fornuftig løsning på problemet ?

Svar og ideer modtages gerne :-)
Avatar billede driis Nybegynder
28. februar 2005 - 22:24 #1
Ja, jeg vil mene at ThreadPool er en mulig løsning.

Nok noget i retning af:
- Lav en klasse der indeholder al nødvendig information for processeringen af et XML dokument. Lad klassen have en metode, der passer med en WaitCallBack delegate, som bruges af ThreadPool.
- Hovedtråden fører regnskab med hvilke dokumenter, du allerede er gået i gang med at processere.
- Når der kommer nye dokumenter til, instantierer du et objekt af ovennævnte klasse og starter en tråd fra poolen, der arbejder på denne klasse.

Det er én mulig løsning.
Avatar billede mungojerrie Nybegynder
28. februar 2005 - 22:45 #2
den metode som skal puttes i min WaitCallBack delegate, skal vel være den metode som afsender mit soap request samt modtager den igen eller ?
Avatar billede driis Nybegynder
28. februar 2005 - 23:04 #3
Det var tanken. Metoden kan også flytte dokumentet og skrive til loggen, eller evt. signalere til hovedtråden, når der skal skrives til loggen.
Avatar billede mungojerrie Nybegynder
01. marts 2005 - 10:51 #4
Jeg har fundet nogle eksempler fra MS's hjemmeside og jeg synes ikke helt det virker som jeg gerne vil:

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
using System.Threading;

namespace TestApp
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: Add code to start application here
            //
            for(int i=0; i<=5; i++)
            {
                Send();
                Console.WriteLine("antal request sendt: " + i);
            }
            Console.ReadLine();
        }

        static void PoolFunc(IAsyncResult ar)
        {
            HttpWebRequest request;
            HttpWebResponse response;

            Console.WriteLine("Response received on pool: {0}",  Thread.CurrentThread.IsThreadPoolThread);
            request = (HttpWebRequest)ar.AsyncState;
            response = (HttpWebResponse)request.EndGetResponse(ar);
            Console.WriteLine("Response size: {0}", response.ContentLength);
        }
        static void Send()
        {
            HttpWebRequest request;
            IAsyncResult ar;

            request = (HttpWebRequest)WebRequest.CreateDefault( new Uri("http://www.microsoft.com"));
            ar = request.BeginGetResponse(new AsyncCallback(PoolFunc), request);
            Console.WriteLine("Synchronous: {0}", ar.CompletedSynchronously);
            //Console.ReadLine();
        }
    }
}

Jeg får kun udskrevet:

Synchronous: False
antal request sendt: 0
Synchronous: False
antal request sendt: 1
Synchronous: False
antal request sendt: 2
Synchronous: False
antal request sendt: 3
Synchronous: False
antal request sendt: 4
Synchronous: False
antal request sendt: 5
Response received on pool: True
Response size: 16511
Response received on pool: True
Response size: 16511


Altså kommer der ingen svar fra de sidste 3 requests og det er jo ikke så godt...
Avatar billede mungojerrie Nybegynder
03. marts 2005 - 09:20 #5
driis : er jeg kommet udenfor dit vidensområde ?? :-)
Avatar billede mungojerrie Nybegynder
07. marts 2005 - 19:41 #6
svar...lukker.....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester