<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Web Services</title><link>https://www.dotnetzone.gr:443/cs/forums/21/ShowForum.aspx</link><description>Συζήτηση περί των web services και WSE, την υλοποίησή τους με το .NET Framework, καθώς και θέματα interoperability με άλλα συστήματα</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Async WebServices που χρησιμοποιούν WebRequest</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/37111.aspx</link><pubDate>Fri, 09 Nov 2007 02:59:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:37111</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/37111.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=37111</wfw:commentRss><description>Άν δεν κάνω λάθος, μόνο ένα thread θα απασχοληθεί με το 10-λεπτο send operation. &lt;br&gt;&lt;br&gt;"Παράλληλες/ταυτόχρονες" κλήσεις στο ίδιο Web Service θα εκτελεστούν απο διαφορετικό instance, σε διαφορετικό thread. Μή μασάς λοιπόν. &lt;br&gt;( &lt;i&gt;κατ' αρχήν ... έχεις γράψει κάποιο test το οποίο ανοίγει μερικούς clients που στέλνουν παράλληλα μυνήματα;;;&lt;/i&gt; &lt;i&gt;Οτιδήποτε άλλο είναι λόγια στον αέρα ...&lt;/i&gt; )&lt;br&gt;&lt;br&gt;Αν κάνεις ασύγχρονη την αποστολή ολόκληρου του "πακέτου" μηνυμάτων μέσα στο Web Service, τότε θα ξεκινήσει ένα thread το οποίο θα "παίζει" μέχρι να στείλει τα 100 μηνύματα. Εν τω μεταξύ όμως, το Web Service method σου θα έχει "γυρίσει", δε θα μπλοκάρει, ελευθερώνοντάς σου έτσι ακόμη ένα instance του web service για τους callers σου. Διαφορά θα δείς όμως μετά τους 1000 απόλυτα παράλληλους χρήστες.&lt;br&gt;</description></item><item><title>Απ: Async WebServices που χρησιμοποιούν WebRequest</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/37109.aspx</link><pubDate>Fri, 09 Nov 2007 02:49:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:37109</guid><dc:creator>flougr</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/37109.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=37109</wfw:commentRss><description>&lt;P&gt;Καταρχήν ευχαριστώ για την απάντηση.&lt;BR&gt;Το Windows Service θα ηταν οντως η καλύτερη λύση αλλά είμαι σε Hosted Environment και ετσι αυτό δεν γίνεται.&lt;/P&gt;
&lt;P&gt;Σχετικά με το Thread Pool , νομίζω οτι δέν είναι πολύ δύσκολο να το φτάσω στα όρια του στη συγκεκριμενη περίπτωση.&lt;BR&gt;Παρόλο που δεν υπολογίζω να έχω πάνω απο 50-100 χρηστές online , υπάρχει περίπτωση να πρέπει να στειλώ πάνω απο 100 scheduled messages κάποια χρονική στιγμή. &lt;BR&gt;Εχω υπολογίσει οτι για να σταλεί κάθε μήνημα με το WebRequest και να πάρω το response , χρειάζoνται απο 4-6 δευτερόλεπτα και σε αυτά&amp;nbsp;θα πρέπει να προσθεθούν αλλά 2 περίπου για&amp;nbsp;την επεξεργασία και την εγγραφή του αποτελέσματος στη βαση.&lt;BR&gt;Ετσι αν πάρουμε ως παράδειγμα το 100 μηνύματα που θα πρέπει να φύγουν το ένα μετα το αλλο , θα χρειαστώ περίπου 10 λεπτά , στη καλύτερη περίπτωση ,&amp;nbsp;για να ολοκληρωθεί η διαδικασία.&lt;BR&gt;Αν έκανα τη διαδικασία ασυγχρονη , φοβάμαι οτι θα ανοιγανε πολλά νεα thread με αποτέλεσμα να φτάσει το thread pool στα ορία του , ειδικά απο τη στιγμή που είμαι σε hosted environment.&lt;BR&gt;&lt;BR&gt;Αυτό που με απασχολεί πιο πολύ είναι τι γίνεται αν κατα τη διάρκεια που στέλνονται αυτά τα 100 μηνύματα σειριακά (χωρις ασυγχρονες κλήσεις) συμβει καποιοι χρήστες να καλέσουν μεσα απο το UI της σελίδας το webservice για να στείλουν&amp;nbsp;καποια μηνυματα.&lt;BR&gt;Θα πρέπει να περιμένουν να τελειώσουν τα WebRequest που εκτελούνται ηδη ή θα ξεκινήσει ένα νεο WebRequest για κάθε χρήστη σε άλλο Thread ;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Async WebServices που χρησιμοποιούν WebRequest</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/37088.aspx</link><pubDate>Fri, 09 Nov 2007 00:23:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:37088</guid><dc:creator>anjelinio</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/37088.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=37088</wfw:commentRss><description>Το πρώτο που θα πώ είναι ... γιατί HttpModule ??? Νομίζω ότι αν πάρεις αυτόν τον κώδικα σε μια άλλη κλάσση, δημιουργώντας ένα singleton στο Application.OnStart μέσα στο Global.asax θα κάνεις πιο καθαρά τη δουλειά σου, τα HttpModules δεν είναι για αυτό το πράγμα που κάνεις, εφ'όσον στην ουσία δεν κάνεις respond σε events του Application. Ακόμα, ένα Windows Service, είναι πιο ταιριαστό σε αυτό που θες να κάνεις.&lt;br&gt;&lt;br&gt;( &lt;i&gt;Επίσης δεν έχεις "εύκολο" τρόπο να το "βρείς" απο κώδικα και να το σταματήσεις ... ενώ αν το σώσεις σε ένα Application.Items["mybackgroundMessageSender"] το βρίσκεις πολύ εύκολα και γρήγορα&lt;/i&gt; )&lt;br&gt;&lt;br&gt;Τώρα, όσον αφορά το asynchronicity. Στη μεριά του site, νομίζω ότι είσαι οκ έχοντας σαν δεδομένο ότι τρέχεις στο background, και δεν υπάρχει κάποιο ιδιέταιρο interaction μεταξύ του sender και του site, και αν τελικά δε σε νοιάζει πόσο χρόνο θα κάνει να τελειώσει με τα send. &lt;br&gt;&lt;br&gt;Στη μεριά του Web Service τώρα. Αν θυμάμαι καλά, τα web services είναι by default multi-instance. Δημιουργείται δηλαδή κάθε φορά που το καλείς ένα νέο instance. Οπότε, αυτό που σε καίει μόνο είναι το μέγεθος του ASP.NET Thread Pool. Αν όμως έχεις τόσο μεγάλο αριθμό χρηστών ώστε αυτό να γίνει όντως πρόβλημα, τότε ναι, κάνεις τη διαδικασία με τα Web Requests ασύγχρονα, βγάζοντάς την έξω απο τη SendMessage σε άλλο method, το οποίο θα εκτελέσεις σε νέο thread, ή θα καλέσεις ασύγχρονα - &lt;i&gt;προσοχή, εκεί θα μπλέξει το πράγμα, για αρχή δοκίμασε απλώς το νέο thread&lt;/i&gt;. &lt;i&gt;Αν φτάσεις το thread pool στα όριά του, θα πρέπει να "μετακομίσεις" σε κάποιο άλλο thread pool implementation, αλλιώς θα κλέβεις threads έτσι κι αλλιώς απο αυτό του ASP.NET, δώρον άδωρον&amp;nbsp;&lt;/i&gt; ...&lt;br&gt;&lt;br&gt;Ενδεικτικά να πώ ότι χρειάζεσαι&amp;nbsp; π ρ α γ μ α τ ι κ ά&amp;nbsp; μεγάλο αριθμό χρηστών για να φτάσεις το thread pool στα όριά του,  αλλά μπορεί να γίνει. Μιλάμε όμως για χιλιάδες, όχι εκατοντάδες χρήστες.&lt;br&gt;</description></item><item><title>Async WebServices που χρησιμοποιούν WebRequest</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/37084.aspx</link><pubDate>Thu, 08 Nov 2007 23:36:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:37084</guid><dc:creator>flougr</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/37084.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=21&amp;PostID=37084</wfw:commentRss><description>&lt;P&gt;Καλησπέρα , θα ήθελα τη γνώμη σας για το πώς πρέπει (και το αν πρεπει) να υλοποιηθεί ασύγχρονα ένα σύνολο ενεργείων που εκτελείτε στο background μιας ASP.NET 2 εφαρμογής.&lt;BR&gt;Συγκεκριμένα :&lt;/P&gt;
&lt;P&gt;Έχω κάνει register ένα &lt;STRONG&gt;HTTP Module&lt;/STRONG&gt; το οποίο δημιουργεί ένα Thread&amp;nbsp;και καλέι μια ρουτινα&amp;nbsp;σε τακτικά χρονικά διαστήματα.&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Public &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Class&lt;/SPAN&gt; CSBkGroundWorker&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Implements&lt;/SPAN&gt; IHttpModule&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Sub&lt;/SPAN&gt; Init(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;ByVal&lt;/SPAN&gt; context &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; System.Web.HttpApplication) &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Implements&lt;/SPAN&gt; System.Web.IHttpModule.Init&lt;/SPAN&gt;Dim&lt;/SPAN&gt; t &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;New&lt;/SPAN&gt; Thread(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;AddressOf&lt;/SPAN&gt; SendMessages)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim t As New Thread(AddressOf SendScheduledMessages)&lt;BR&gt;t.Start()&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;End Sub&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;' Και η Sub την οποία τρέχει(Βρισκεται μεσα στο Module)&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Shared&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Sub&lt;/SPAN&gt; SendScheduledMessages()&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;While&lt;/SPAN&gt; 1&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim&lt;/SPAN&gt; MessageQueque &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; List(Of Messages) &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;New&lt;/SPAN&gt; List(Of Messages)&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim&lt;/SPAN&gt; MyWebService &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;New&lt;/SPAN&gt; MyNameSpace.WebServices.Messaging&lt;BR&gt;&lt;BR&gt;MessageQueque=GetMessagesFromDataBase() &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;' Database Read&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;For&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Each&lt;/SPAN&gt; Msg &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;in&lt;/SPAN&gt; MessageQueque&lt;BR&gt;&lt;BR&gt;MyWebService.SendMessage(Msg) &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;' WebService Call&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;LogMessageToDataBase(Msg)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;' Database Write&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Next&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;Thread.Sleep(intervalminutes &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;*&lt;/SPAN&gt; 60000)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;End&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;While&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;End&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Sub&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;Η Παραπάνω υπορουτίνα κάνει τα εξης (Εχω απλοποιήσει το κώδικα για λόγους εμφάνισης) :&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;1. Δίαβάζει ενα σύνολο μηνυμάτων απο την βάση&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;2. Για κάθε μήνυμα : &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000000&gt;2.a : Καλεί μια μέθοδο ενος Web Service η οποία στέλνει το μήνυμα σε κάποιο άλλο server κανοντας χρήση WebRequest (Synchronous)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.b : Γράφει σε εναν πίνακα Log της βάσης το αποτέλεσμα που επέστρεψε το Web Service&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;3. Τελειώνοντας κανει Sleep το Thread για καποιο χρονικο διάστημα.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;Τέλος η Μεθοδος του WebService που καλέιται είναι περίπου η εξης : &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&amp;lt;WebMethod(MessageName:=&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"SendMessage"&lt;/SPAN&gt;)&amp;gt; _&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Sub&lt;/SPAN&gt; SendMessage( &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;ByRef&lt;/SPAN&gt; message &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; Messsage)&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim&lt;/SPAN&gt; request &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; HttpWebRequest&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim&lt;/SPAN&gt; response &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; HttpWebResponse &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Nothing&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim&lt;/SPAN&gt; reader &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; StreamReader&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Dim&lt;/SPAN&gt; returnHttpResponseInfo &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;New&lt;/SPAN&gt; MessageResponseInfo&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Try&lt;/SPAN&gt;&lt;BR&gt;returnHttpResponseInfo.Status &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; MessageResponseInfo.StatusEnum.StatusUNKNOWN&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;request &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;DirectCast&lt;/SPAN&gt;(WebRequest.Create(message.address), HttpWebRequest)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;' To message.address ειναι ενα url σε απομακρυσμένο server&amp;nbsp; &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;BR&gt;request.UserAgent &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"MessageService"&lt;/SPAN&gt;&lt;BR&gt;request.KeepAlive &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;False&lt;/SPAN&gt;&lt;BR&gt;request.Timeout &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; RequestTimeoutSeconds &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;*&lt;/SPAN&gt; 1000&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;' Get response &lt;/SPAN&gt;&lt;BR&gt;response &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;DirectCast&lt;/SPAN&gt;(request.GetResponse(), HttpWebResponse)&lt;BR&gt;message.result=response&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;End&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;Sub&lt;/SPAN&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;Επειδή δέν εχω ξαναδουλέψει σε ασύγχρονα patterns θα ήθελα τη γνώμη σας στα εξης : &lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;a) Υπάρχει λόγος να γίνει η όλη διαδικασία ασύγχρονη ; Το Web Service κάνει WebRequests σε απομακρυσμένους server&amp;nbsp;ειτε επειδη κλείθηκε απο το HTTPModule&amp;nbsp; είτε ως αποτελεσμα μιας ενεργειας των χρηστών της εφαρμογης (δηλαδή μπορει να χρειαστει να κληθει οποιαδήποτε στιγμη απο έναν η περρισοτερους χρήστες) .Αν την ώρα που το WebService εκτελεί μια σειρά απο WebRequest (Λογω κλησης του απο το HTTP Module)&amp;nbsp; , και ένας χρήστης εκτελέσει μια ενεργεια που εμπλέκει το webservice , θα χρειαστεί να περιμένει να τελείωσουν τα WebRequest απο το HTTP Module ; Η Επειδή το HttpModule τρέχει σε δικό του Thread , δεν χρειάζεται ;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;b) Αν χρειάζεται να γίνει η όλη διαδικασία ασυγχρονη τότε πως θα πρέπει να υλοποιηθεί αυτο ;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1. Να γίνει όλη η Ρουτίνα SendScheduledMessages μέρος του WebService και να την καλώ Ασύγχρονα (BeginSendScheduledMessages...EndSendScheduledMessages) απο το HttpModule&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. Να&amp;nbsp;γινει &amp;nbsp;η κλήση της WebMethod SendMessage ασυγχρονη ;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. Να αλλάξει η υλοποιηση της SendMessage και να κάνω τα WebRequest ασυγχρονα ; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4. Όλα τα παραπάνω ;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;Ευχαριστώ και ελπίζω να μην σας μπέρδεψα &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&lt;FONT face=Tahoma size=2&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;FONT color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>