<?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>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45314.aspx</link><pubDate>Fri, 10 Oct 2008 01:55:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45314</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45314.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45314</wfw:commentRss><description>&lt;P&gt;Νομίζω με τα WCF βρήκα αυτό που ήθελα. Από ένα πρώτο διάβασμα πήρα τις απαντήσεις που ήθελα και βλέπω μέλλον.&lt;/P&gt;
&lt;P&gt;Ευχαριστώ για τις απαντήσεις, προτάσεις και&amp;nbsp;γνώμες.&lt;/P&gt;
&lt;P&gt;Ας ελπίσουμε να μην αλλάξει πάλι γνώμη η Microsoft...&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45309.aspx</link><pubDate>Thu, 09 Oct 2008 22:50:48 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45309</guid><dc:creator>Panagiotis Kefalidis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45309.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45309</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;infoCENTER:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;P&gt;Ναι έχεις δίκιο. Χρειάζεται να τρέχουν services και το setup είναι πιο δύσκολο. Σίγουρα είναι ένα μείον που δεν παραβλέπεται εύκολα, πιο σοβαρό από τα μείον του QN το οποίο εξακολουθεί να είναι πρώτο στην προτίμησή μου&amp;nbsp;λόγω της απλότητάς του&amp;nbsp;Θα ρίξω μία ματιά και στο Remoting (WCF) να δω και από αυτή την μεριά τι γίνεται. &lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Νομίζω η καλύτερη λύση θα ήταν WCF με Sync Services. Το WCF υποστηρίζει τα Sync Services με τέτοιο τρόπο ώστε να μπορεί να γίνεται συγχρονισμός μέσα απο ενα WCF Service με στην κυριολεξία 3 γραμμές κώδικα. Απο εκεί και πέρα, ένα καλό Implementation σε Callback (WCF Callbacks) όταν ενημερώνονται δεδομένα, ώστε να "ειδοποιούνται" οι clients και να κάνουν συγχρονισμό θα σου λύσει τα χέρια τελείως. Ακομά και με τον SQL CE να έχεις Local database, εφόσον το engine του SQL CE μπορεί να τρέξει μέσα απο την εφαρμογή, χωρίς extra setup κλπ, λύνεις και το πρόβλημα των εποχικών πωλητών, γιατί no application, no data. Τα callbacks είναι ουσιαστικά events, κάτι το οποίο μπορούσες να κάνεις και με Remoting&amp;nbsp;και "κλασικά" Events&amp;nbsp;σε προηγούμενες εκδόσεις του .Net, χωρίς αυτό βέβαια να ειναι ΚΑΘΟΛΟΥ μα ΚΑΘΟΛΟΥ διασκεδαστικο και εύκολο καθώς ήταν πατέντα της πατέντας. Με το WCF είναι εξαιρετικά εύκολο, ειδικά όταν το event είναι OneWay (δηλαδή απλά το WCF λέει στον Client "Ενημερώσου" και δεν περιμένει απάντηση).&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45306.aspx</link><pubDate>Thu, 09 Oct 2008 21:18:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45306</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45306.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45306</wfw:commentRss><description>&lt;P&gt;Ναι έχεις δίκιο. Χρειάζεται να τρέχουν services και το setup είναι πιο δύσκολο. Σίγουρα είναι ένα μείον που δεν παραβλέπεται εύκολα, πιο σοβαρό από τα μείον του QN το οποίο εξακολουθεί να είναι πρώτο στην προτίμησή μου&amp;nbsp;λόγω της απλότητάς του&amp;nbsp;Θα ρίξω μία ματιά και στο Remoting (WCF) να δω και από αυτή την μεριά τι γίνεται. &lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45293.aspx</link><pubDate>Thu, 09 Oct 2008 17:09:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45293</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45293.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45293</wfw:commentRss><description>&lt;P&gt;Για να το κάνεις αυτό λες με MSMQ θα πρέπει κάθε client και ο server να τρέχουν το MSMQ service ώστε να μπορούν να στείλουν και να λάβουν μηνύματα. Αυτό έχει διαχειριστικό κόστος, και καθιστά το setup πιο δύσκολο. &lt;/P&gt;
&lt;P&gt;Επικοινωνία μεταξύ εφαρμογών μπορεί να γίνει με πολλούς τρόπους. Μπορείς να το κάνεις για παράδειγμα με Remoting - πλέον WCF.&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45288.aspx</link><pubDate>Thu, 09 Oct 2008 09:17:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45288</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45288.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45288</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;P&gt;Μάλιστα, τώρα κατάλαβα κάπως καλύτερα. Όταν έγραψες "όλα τα δεδομένα να φορτώνονται στον Client" φαντάστηκα ότι θα υπάρχει μα τοπική βάση ως storage. Μάλλον εννοούσες θα τα φέρνει όλα στη μνήμη... Και για να μην ξεκινήσω πάλι να γράφω άσχετα πράγματα, υποθέτω το ζητούμενο είναι όταν ένας client αλλάξει τα data, να βλέπουν αμέσως και αυτόματα όλοι οι υπόλοιποι τις αλλαγές; &lt;/P&gt;
&lt;P&gt;Πάντως, δεν μπορώ να φανταστώ τη χρησιμότητα ενός Queue Server... Γενικά (και χονδρικά), το message queueing χρησιμοποιείται όταν οι clients πρέπει να στείλουν κάποια data στον server, με ρυθμό που να μην προλαβαίνει ο server να τα διαχειριστεί, οπότε τα στέλνουν στο queue και ξεμπερδεύουν χρήγορα. Από την άλλη μεριά, τα Notification Services είναι πλέον obsolete τεχνολογία καθώς σταμάτησαν να παρέχονται στον SQL Server 2008. &lt;/P&gt;
&lt;P&gt;Μπορείς ωστόσο να χρησιμοποιήσεις τα &lt;A href="http://msdn.microsoft.com/en-us/library/ms175110.aspx"&gt;Query Notifications&lt;/A&gt; τα οποία δεν έχουν να κάνουν με τα Notification Services και έχουν πιο απλό API. Τα έχω&amp;nbsp;χρησιμοποιήσει και ήταν πολύ εύκολα στην υλοποίηση, ωστόσο είχα ένα θέμα&amp;nbsp;γιατί οι περισσότεροι&amp;nbsp;clients ήταν wireless με αποτέλεσμα (ίσως λόγω broadcast?) να μπλοκάρουν αρκετά οι clients. Όσο έπαιζα με ενσύρματους clients ήταν μια χαρά. Μπορείς να το δοκιμάσεις πάντως στο θέμα του wireless, ίσως να ήταν προβληματικό το setup που μου είχε τύχει.&lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Πριν από λίγο είδα το παραπάνω post σου οπότε μου δίνεις μία σύντομη περιγραφή για τις δύο μου προτάσεις. Δεν το ήξερα αυτό για τα Notification Services. Νομίζω πειραματίζεται η Microsoft πότε το παρουσίασαν πότε αρχίσαμε να ασχολούμαστε με αυτό, εγώ μάλλον δεν πρόλαβα, και πότε το ακύρωσαν...&lt;/P&gt;
&lt;P&gt;MSMQ : Ναι έχεις δίκιο για την γενική και χονδρική του χρήση αλλά είπα σε αυτό το σενάριο να χρησιμοποιήσω την λειτουργικότητά του για μία άλλη εργασία. Άλλωστε και ένας από τους λόγους που δημιουργήθηκε ήταν&amp;nbsp;να δώσει τη δυνατότητα σε εφαρμογές να επικοινωνούν μεταξύ τους. &lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45286.aspx</link><pubDate>Thu, 09 Oct 2008 09:01:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45286</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45286.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45286</wfw:commentRss><description>&lt;P&gt;Δεν βλέπω αρνητικά τα QN. Είμαι ακόμα θετικός στην σκέψη αυτή και όπως είπα σίγουρα θα μετρήση μαζί με αυτές που ανέφερα στην αρχή. &lt;/P&gt;
&lt;P&gt;Απλά επειδή πάντα πριν αρχίσω να επενδύω χρόνο πάνω σε κάτι, κάνω μία αρχική έρευνα, βάζω κάτω τα συν και τα πλην και στο τέλος αποφασίζω. Λέγοντας μείον δεν εννοώ απόλυτα ότι δεν μπορεί να γίνει κάτι, αλλά άλλες φορές δεν συμπεριφέρεται ακριβώς όπως θα περίμενα, οπότε χρειάζεται από εμένα παραπάνω κώδικα και ίσως πολυπλοκότητα και άλλες φορές ότι χρειάζεται να αλλάξω τον τρόπο που σχεδιάζω κάτι για να φέρω πιο κοντά τον κώδικά μου με την τεχνολογία που θέλω να χρησιμοποιήσω. &lt;/P&gt;
&lt;P&gt;Στην αρχή ανέφερα MSMQ, ας μιλήσουμε λίγο για αυτό. Από μία πρώτη εικόνα που έχω, είναι ότι θα μπορούσα μέσα από εκεί να στείλω ότι πληροφορία θέλω. Θα μπορούσα δηλαδή να πέρνω είτε ολόκληρη την εγγραφή, οπότε καμία επικοινωνία με την βάση,&amp;nbsp;είτε ας πούμε το id της εγγραφής που έχει γίνει update, delete, insert οπότε η πρόσβαση στην βάση μου να είναι πιο συγκεκριμένη. Φυσικά αυτό σημαίνει πως όταν ένα μηχάνημα είναι offline και μπει online ίσως το περιμένουν ένα σωρό μηνύματα από το MSMQ αλλά εύκολα μπορείς να τα απορρίψεις από την στιγμή που έχεις πάρει μία πιο&amp;nbsp;πρόσφατη εικόνα των δεδομένων. Το μήνυμα ότι κάτι καταχωρήθηκε δεν θα το στέλνει ο SQL αλλά ο σταθμός που όντως έκανε την καταχώρηση, οπότε θα μπορούσε να κάνει serialize το object και να το στείλει στο MSMQ μαζί με κάποιες άλλες πληροφορίες. Οπότε οι σταθμοί θα μπορούσαν να το παραλάβουν και άμμεσα να το βάλουν στην λίστα με τις υπόλοιπες εγγραφές χωρίς κάποια πρόσβαση στην βάση. Δείχνει η τέλεια λύση με όλα τα παραπάνω που με προβληματίζουν, είναι όμως; Δεν έχω ασχοληθεί ξανά, οπότε δεν γνωρίζω τι δυσκολίες μπορεί να έχει αυτή η προσπάθεια μπορεί κάποιος που έχει ασχοληθεί να μου πει αρνητικά ή θετικά σχόλια; &lt;/P&gt;
&lt;P&gt;Τι γνώμη έχετε για αυτό; Θα το συνιστούσατε ως λύση&amp;nbsp;σε ένα παρόμοιο σενάριο; &lt;/P&gt;
&lt;P&gt;Υστ : Σχετικά με τις συνδέσεις. Κοίτα δεν είναι εύκολο να πεις Ν * 2 οπότε πάνω από ένα αριθμό συνδέσεων να&amp;nbsp;υποθέσεις ότι&amp;nbsp;δεν μπορούν να μπουν άλλοι χρήστες. Ανάλογα με το πως σχεδιάζετε μία εφαρμογή δεν είναι ανάγκη όλες οι φόρμες να γίνονται αυτόματα Refresh. Συνήθως το Refresh το θέλουμε σε φόρμες που μας δίνουν μία γενική εικόνα. Αν ένας χρήστης έχει ανοίξει μόνο μία φόρμα και αυτή είναι η φόρμα των καταχωρήσεων τότε όπως καταλαβαίνεις αντί να έχω 10 χρήστες στην εφαρμογή μου με τον κανόνα&amp;nbsp;10 * 2, μπορεί τελικά να καταλήξω να έχω από 10 και πάνω, από την στιγμή που μερικοί δεν θα χρειάζεται να ανοίξουν και δεύτερο connection για να παρακολουθούν τις ενημερώσεις.&amp;nbsp;Εκτός φυσικά και αν ανοίξεις μία dummy connection και την κρατάς ανοιχτή. χμ... μήπως τελικά αυτή η Microsoft μας γυρίζει γύρω γύρω; Από την μία φύγαμε από την μόνιμη σύνδεση με την βάση και πήγαμε στο απομακρυσμένο μοντέλο και από την άλλη γυρνάμε πάλι στην μόνιμη σύνδεση;&lt;/P&gt;
&lt;P&gt;Υστ 2: Βασικά KelMan&amp;nbsp;η πρώτη μου&amp;nbsp;σκέψη&amp;nbsp;ήταν να σταματάει το Notification όταν θα κλείνει το Connection. Με ξένισε λίγο όταν είδα ότι δεν γίνεται όταν το πρωτοδιάβασα, αλλά κατάλαβα ότι από την στιγμή που δεν σου δίνει κάποια πληροφορία τι έχει αλλάξει, οπότε υποχρεωτικά θα πας στην βάση για να ξανακάνεις ερώτημα, το έφτιαξαν έτσι. Και πάλι όμως δεν με&amp;nbsp;πείθει η συγκεκριμένη σκέψη για διάφορους λόγους και σενάρια.&amp;nbsp;Θα περίμενα όταν κλείνει το connection να σταματάει το&amp;nbsp;notification.&amp;nbsp;Ευτυχώς το άρθρο που διάβασα ήταν παλιό γιατί δουλεύοντας όλο το απόγευμα πάνω στα QN τελικά είδα ότι μόλις κλείσει το connection σταματάει και το Notification και όχι όταν σου στείλει την πρώτη ειδοποίηση.&lt;/P&gt;
&lt;P&gt;Υστ 3: Δυστυχώς το σενάριο με τις τοπικές βάσεις δεν&amp;nbsp;παίζει,&amp;nbsp;για λόγους που αφορούν την εταιρεία&amp;nbsp;δεν έχει γίνει αποδεκτό. Βλέπεται το πρόβλημα είναι με τους εποχικούς πωλητές και τα φορητά τους. &lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45277.aspx</link><pubDate>Thu, 09 Oct 2008 05:49:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45277</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45277.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45277</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;infoCENTER:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt; 
&lt;UL&gt;
&lt;LI&gt;Όταν ο SQL στείλει στην εφαρμογή μου ειδιποίηση ότι τα δεδομένα έχουν αλλάξει τότε βγάζει από το Service Broker την αίτησή μου να ενημερώνομαι για τις αλλαγές που μπορούν να γίνουν σε αυτές τις εγγραφές. Θα πρέπει να τρέξω ξανά το query έτσι ώστε ο Service Broker να καταχωρήσει νέο Dependency. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Ως προς τα παραπάνω, είναι λογική αυτή η συμπεριφορά. Μόλις πάρεις το notification, δεν έχει νόημα να συνεχίσει να στέλνει o server notifications. Οπότε όταν θα ξαναζητήσεις τα data για να δεις τι ακριβώς αλλαγές έχουν γίνει, τότε ξαναsetάρεις (sic!) το depedency.&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;infoCENTER:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Όσο για τις ενημερώσεις δυστυχώς, για αυτή την περίπτωση λέω δυστυχώς, έχω εκφράσει την γνώμη μου για τα datasets παλαιότερα, δεν τα χρησιμοποιώ. Αν και δεν είμαι τόσο σίγουρος αν θα βοηθούσαν τελικά. Όχι ότι ο τρόπος που προτείνεις είναι λάθος, αλλά πρακτικά δεν ξέρω πόσο καλά θα παίξει.&amp;nbsp;Είπα στην αρχή ότι τα δεδομένα δεν είναι πολλά δεν είναι όμως και 100 εγγραφές. Σίγουρα όταν ξεκινάει η εφαρμογή θα φορτώνει γύρω στις 3000-10000, το πολύ,&amp;nbsp;εγγραφές. Φαντάζεσαι αυτό με τα datasets να γίνεται, έχοντας QN σε εταιρεία με&amp;nbsp;12 άτομα προσωπικό σε μόνιμη βάση, συν τους εποχικούς που θα πέρνει... Δεν μου ακούγεται καλό αυτό...&amp;nbsp;Όποτε θα προσπαθούν να γράφουν η εφαρμογή θα δείχνει ότι ψιλό κολλάει για λίγο. &lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Τη σύγκριση παλιών με φρέσκων δεδομένων μπορείς να την κάνεις και χειροκίνητα. Ο βαθμός δυσκολίας έχει να κάνει ανάλογα με τη φύση των δεδομένων και το business logic. Πάντως, όπως και να έχει, με κάθε notification να τραβολογάς 10000 εγγραφές δεν είναι και λίγο πράγμα.&amp;nbsp;Καλύτερα να αξιολογήσεις τη δεύτερη λύση που σου πρότεινε ο Παναγιώτης, notification services σε συνδυασμό με τοπική light βάση&amp;nbsp;και&amp;nbsp;sync services.&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45275.aspx</link><pubDate>Thu, 09 Oct 2008 03:33:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45275</guid><dc:creator>Panagiotis Kefalidis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45275.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45275</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;infoCENTER:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;UL&gt;
&lt;LI&gt;Οι ειδοποιήσεις του SQL Server επιστρέφονται μέσα από μία μόνο SQLConnection την οποία θα πρέπει να ανοίξουμε από την αρχή της εφαρμογής μας και να κλείσουμε στο τέλος. Οπότε ότι inserts, updates deletes θα θέλαμε να κάνουμε θα πρέπει να δημιουργήσουμε νέες συνδέσεις. Μικρό το κακό από την μία, από την άλλη αν κάποιος βασίζεται πάνω στις συνδέσεις που γίνονται στον SQL Server για να μετρήσει πόσοι χρήστες έχουν την δυνατότητα να χρησιμοποιούν την εφαρμογή του θα πρέπει να το βρει με άλλο τρόπο. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Ουσιαστικά εάν θες να τους μετρήσεις, μπορείς απλά να έχεις.. N*2 (οπού Ν=clients) συνδεμένους. Αφού πάντα έχεις ένα ανοιχτό connection για τα QN, τότε ξέρεις ότι πάντα πρέπει να "προσθέτεις" ένα connection ακόμα.&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45274.aspx</link><pubDate>Thu, 09 Oct 2008 02:00:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45274</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45274.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45274</wfw:commentRss><description>&lt;P&gt;Με λίγο διάβασμα παραπάνω αρχίσαμε να βλέπουμε και την πίσω πλευρά των QN, που βέβαια σε μερικούς μπορεί να μην παίζει ρόλο σε άλλους όμως να παίζει. Βέβαια ομολογώ ότι φτάσαμε πολύ κοντά με τα QN και ίσως τελικά να το χρησιμοποιήσω.&lt;/P&gt;
&lt;P&gt;Τα άσχημα της υπόθεσης είναι &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Όταν ο SQL στείλει στην εφαρμογή μου ειδιποίηση ότι τα δεδομένα έχουν αλλάξει τότε βγάζει από το Service Broker την αίτησή μου να ενημερώνομαι για τις αλλαγές που μπορούν να γίνουν σε αυτές τις εγγραφές. Θα πρέπει να τρέξω ξανά το query έτσι ώστε ο Service Broker να καταχωρήσει νέο Dependency.&lt;/LI&gt;
&lt;LI&gt;Οι πληροφορίες που πέρνω πίσω είναι απλά ότι έγινε μία αλλαγή (σωστά το αναφέρεις KelMan) και όχι πια αλλαγή ήταν αυτή. Συνδέστε αυτό με το επάνω.&lt;/LI&gt;
&lt;LI&gt;Δεν συνιστάτε όταν έχουμε πολλούς Clients, ας πούμε ένα νούμερο πάνω από 10 σε αναλογία βέβαια σε τι βαθμό χρησιμοποιούμε QN και πάνω σε ποια δεδομένα. Γενικώς συνιστάτε να μην χρησιμοποιείται σε δεδομένα που αλλάζουν συχνά. Εδώ υπάρχει ένα μικρό πρόβλημα θα έλεγα. &lt;/LI&gt;
&lt;LI&gt;Οι ειδοποιήσεις του SQL Server επιστρέφονται μέσα από μία μόνο SQLConnection την οποία θα πρέπει να ανοίξουμε από την αρχή της εφαρμογής μας και να κλείσουμε στο τέλος. Οπότε ότι inserts, updates deletes θα θέλαμε να κάνουμε θα πρέπει να δημιουργήσουμε νέες συνδέσεις. Μικρό το κακό από την μία, από την άλλη αν κάποιος βασίζεται πάνω στις συνδέσεις που γίνονται στον SQL Server για να μετρήσει πόσοι χρήστες έχουν την δυνατότητα να χρησιμοποιούν την εφαρμογή του θα πρέπει να το βρει με άλλο τρόπο. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Παρ' όλα αυτά όμως δεν αλλάζει η θετική συνολική εικόνα που έχω, σίγουρα είναι μία πρόταση που θα συμπεριλάβω στις αρχικές μου δύο όταν θα έρθει η ώρα να αποφασίσω. &lt;/P&gt;
&lt;P&gt;Στα θετικά της ιστορίας βάζω &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Το απλό γράψιμο κώδικα για να στηθεί από την μεριά της εφαρμογής μου.&lt;/LI&gt;
&lt;LI&gt;Δεν χρειάζεται να στήσουμε πολλά πράγματα για να παίξει. &lt;/LI&gt;
&lt;LI&gt;Παίζει κάτω από SQLExpress. Σωστά kelMan βρήκα ένα άρθρο για αυτό.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Όσο για τις ενημερώσεις δυστυχώς, για αυτή την περίπτωση λέω δυστυχώς, έχω εκφράσει την γνώμη μου για τα datasets παλαιότερα, δεν τα χρησιμοποιώ. Αν και δεν είμαι τόσο σίγουρος αν θα βοηθούσαν τελικά. Όχι ότι ο τρόπος που προτείνεις είναι λάθος, αλλά πρακτικά δεν ξέρω πόσο καλά θα παίξει.&amp;nbsp;Είπα στην αρχή ότι τα δεδομένα δεν είναι πολλά δεν είναι όμως και 100 εγγραφές. Σίγουρα όταν ξεκινάει η εφαρμογή θα φορτώνει γύρω στις 3000-10000, το πολύ,&amp;nbsp;εγγραφές. Φαντάζεσαι αυτό με τα datasets να γίνεται, έχοντας QN σε εταιρεία με&amp;nbsp;12 άτομα προσωπικό σε μόνιμη βάση, συν τους εποχικούς που θα πέρνει... Δεν μου ακούγεται καλό αυτό...&amp;nbsp;Όποτε θα προσπαθούν να γράφουν η εφαρμογή θα δείχνει ότι ψιλό κολλάει για λίγο. &lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45272.aspx</link><pubDate>Thu, 09 Oct 2008 00:56:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45272</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45272.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45272</wfw:commentRss><description>&lt;P&gt;Σε SQL Server Express παίζουν μια χαρά, απλά πρέπει το setup να το κάνεις με TSQL Commands καθώς το SSMS δεν παρέχει visual τρόπο. Δεν είναι δύσκολο, μερικές εντολές είναι.&lt;/P&gt;
&lt;P&gt;Ως προς το δεύτερο θέμα, αν θυμάμαι καλά, όντως δεν σου φέρνει τις αλλαγές, ωστόσο αν μιλάμε για DataSets είναι αρκετά εύκολο να δεις ποιά data είναι διαφορετικά. Φτιάχνεις ένα νέο DataSet. Κάνεις το τρέχον dataset merge με το νέο,&amp;nbsp;κάνεις AcceptChanges και μετά ξανακάνεις το αποτέλεσμα Merge με το DataSet που ξανατραβάς αφού πάρεις το notification. Mετά παίρνεις τις διαφορές με GetChanges. Ακούγεται περίπλοκο αλλά είναι 4 γραμμές κώδικας:&lt;/P&gt;
&lt;P&gt;Dim dsNew as DataSet&amp;nbsp; = new DataSet()&lt;BR&gt;dsNew.Merge(dsOriginal)&lt;BR&gt;dsNew.AcceptChanges()&lt;BR&gt;dsNew.Merge(dsRefresh)&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45271.aspx</link><pubDate>Wed, 08 Oct 2008 23:55:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45271</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45271.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45271</wfw:commentRss><description>&lt;P&gt;Νομίζω ότι το Query Notifications είναι μια αρκετά καλή λύση. &lt;/P&gt;
&lt;P&gt;Διάβασα τα links που μου πρότεινες αλλά δεν έμεινα μόνο σε αυτά, προχώρησα και παρακάτω. Είναι πάρα πολύ κοντά σε αυτό που είχα στο μυαλό μου. Θα ήθελα να αναφέρω δύο πράγματα μόνο. &lt;/P&gt;
&lt;P&gt;Το ένα έχει να κάνει με το Query Notifications &amp;amp; SQLExpress. Όπως είπα η βάση θα είναι SQLExpress. Διαβάζοντας είδα ότι το QN δεν υποστηρίζεται για τον SQLExpress αν και μερικοί είπαν πως τα κατάφεραν και δουλεύουν πάνω στον SQLExpress. Ίσως περισσότερο διάβασμα να μου λύση τελικά την απορία αυτή.&lt;/P&gt;
&lt;P&gt;Το δεύτερο έχει να κάνει με τις πληροφορίες που πέρνω πίσω από το event. Πουθενά δεν μου έχει την εγγραφή που άλλαξε. Ίσως είναι κάτω από κάποιο property που δεν έχω διαβάσει, δει ακόμα. Είναι πολύ βασικό να πάρω και τις τιμές του record που έχει αλλάξει έτσι ώστε με το Change Type ξέρω αν έχω μεταβολή, νέα καταχώρηση ή διαγραφή οπότε να μπορώ να επέμβω άμεσα στο DataCollection μου και να ενημερώσω ανάλογα. Σε καμία περίπτωση δεν θέλω όταν ο χρήστης είναι μέσα σε ένα Grid ξαφνικά το Grid να γίνεται συνολικά Refresh και να πετάει τον χρήστη στην αρχική εγγραφή του Grid ή σε κάποια άλλη τυχαία εγγραφή.&lt;/P&gt;
&lt;P&gt;Σίγουρα μου λείπει διάβασμα για τα QN και ελπίζω να μου λύση τις δύο αυτές απορίες μου, όμως πραγματικά μου άρεσε πολύ η παραπάνω μέθοδος. Τώρα όσο για τα μείον της... Δεν γνωρίζω αρχή είναι ακόμα και είδαμε την ωραία πλευρά. Υπομονή, να δούμε τι μας περιμένει από πίσω...&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45266.aspx</link><pubDate>Wed, 08 Oct 2008 22:29:22 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45266</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45266.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45266</wfw:commentRss><description>&lt;P&gt;Μάλιστα, τώρα κατάλαβα κάπως καλύτερα. Όταν έγραψες "όλα τα δεδομένα να φορτώνονται στον Client" φαντάστηκα ότι θα υπάρχει μα τοπική βάση ως storage. Μάλλον εννοούσες θα τα φέρνει όλα στη μνήμη... Και για να μην ξεκινήσω πάλι να γράφω άσχετα πράγματα, υποθέτω το ζητούμενο είναι όταν ένας client αλλάξει τα data, να βλέπουν αμέσως και αυτόματα όλοι οι υπόλοιποι τις αλλαγές; &lt;/P&gt;
&lt;P&gt;Πάντως, δεν μπορώ να φανταστώ τη χρησιμότητα ενός Queue Server... Γενικά (και χονδρικά), το message queueing χρησιμοποιείται όταν οι clients πρέπει να στείλουν κάποια data στον server, με ρυθμό που να μην προλαβαίνει ο server να τα διαχειριστεί, οπότε τα στέλνουν στο queue και ξεμπερδεύουν χρήγορα. Από την άλλη μεριά, τα Notification Services είναι πλέον obsolete τεχνολογία καθώς σταμάτησαν να παρέχονται στον SQL Server 2008. &lt;/P&gt;
&lt;P&gt;Μπορείς ωστόσο να χρησιμοποιήσεις τα &lt;A href="http://msdn.microsoft.com/en-us/library/ms175110.aspx"&gt;Query Notifications&lt;/A&gt; τα οποία δεν έχουν να κάνουν με τα Notification Services και έχουν πιο απλό API. Τα έχω&amp;nbsp;χρησιμοποιήσει και ήταν πολύ εύκολα στην υλοποίηση, ωστόσο είχα ένα θέμα&amp;nbsp;γιατί οι περισσότεροι&amp;nbsp;clients ήταν wireless με αποτέλεσμα (ίσως λόγω broadcast?) να μπλοκάρουν αρκετά οι clients. Όσο έπαιζα με ενσύρματους clients ήταν μια χαρά. Μπορείς να το δοκιμάσεις πάντως στο θέμα του wireless, ίσως να ήταν προβληματικό το setup που μου είχε τύχει.&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45264.aspx</link><pubDate>Wed, 08 Oct 2008 22:11:09 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45264</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45264.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45264</wfw:commentRss><description>&lt;P&gt;Ρίξε μία ματιά στο &lt;A href="http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx"&gt;SqlDependency&lt;/A&gt; class,&amp;nbsp;το &lt;A href="http://msdn.microsoft.com/en-us/library/t9x04ed2.aspx"&gt;Query Notifications in SQL Server&lt;/A&gt;&amp;nbsp;και το &lt;A href="http://msdn.microsoft.com/en-us/library/a52dhwx7(VS.80).aspx"&gt;Using SqlDependency in a Windows Application&lt;/A&gt; για ένα step-by-step παράδειγμα.&amp;nbsp;Το SqlDependency παρακολουθεί τα αποτελέσματα ενός query και όταν αλλάξουν σε ειδοποιεί&amp;nbsp;με το OnChanged event. ΔΕΝ χρησιμοποιεί Notification Services, αλλά το Service Broker, χωρίς όμως εσύ να τον χρησιμοποιείς άμεσα ή&amp;nbsp;έστω να τον&amp;nbsp;αντιλαμβάνεσαι. Απλά πρέπει να βεβαιωθείς ότι ο Service Broker τρέχει.&lt;/P&gt;
&lt;P&gt;Μία άλλη λύση είναι&amp;nbsp;τα Synchronization Services for ADO.NET τα οποία δημιουργούν μία τοπική cache με τα δεδομένα της βάσης που θέλεις να χρησιμοποιήσεις και αναλαμβάνουν την επικοινωνία με το server και το synchronization, ακόμα και 2 κατευθύνσεων, όταν το ζητήσεις. Τα Sync Services δεν απαιτούν συνεχή σύνδεση με τη βάση, οπότε παίζουν ακόμα και σε disconnected σενάρια. Από την άλλη,&amp;nbsp;δεν καταλαβαίνουν αμέσως ότι κάτι άλλαξε στη βάση. Θα πρέπει εσύ να ζητήσεις το syncrhonization. Στην περίπτωση σου όμως θα μπορούσες να χρησιμοποιήσεις ένα συνδυασμό SqlDependency και Sync Services για να έχεις και την τοπική σου cache, και την άμεση ειδοποίηση για τους clients του δικτύου. Στο internet θα μπορούσες να χρησιμοποιήσεις τον ίδιο κώδικα μεν,αλλά αντί για dependency να έχεις ένα timer&lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45258.aspx</link><pubDate>Wed, 08 Oct 2008 19:31:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45258</guid><dc:creator>infoCENTER</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45258.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45258</wfw:commentRss><description>&lt;P&gt;Συγνώμη μάλλον δεν έγινα κατανοητός για το σενάριο.&lt;/P&gt;
&lt;P&gt;Η βάση θα είναι πάντα μία. Οπότε έχουμε το τοπικό δίκτυο και σε μία μελλοντική εξέλιξη θα μπορούσε κάποιος με το φορητό του να μπορεί να συνδέεται στην κεντρική αυτή βάση μέσω Internet για να μπορεί να βλέπει από τον τόπο του ταξιδιού του ή το σπίτι του τις τελευταίες ενημερώσεις. &lt;/P&gt;
&lt;P&gt;Οπότε δεν έχω πολλές βάσης, αλλά μία. 'Οσο για το "πότε" και το "πως". Δεν συζητάω για το "πότε",&amp;nbsp;όσο για το "πως", σε αυτό θα καταλήξω αφού πρώτα δω τα συν και τα πλην τις κάθε πρότασεις που έχω κάνει ή αφού προταθεί κάποια άλλη λύση στο ενδιάμεσο. Έχει δουλέψει κανείς με κάποια από τις παραπάνω λύσεις; Αν λάβουμε υπόψιν και το μελλοντικό σενάριο τις σύνδεσεις μέσω Internet πια λύση είναι πιο "φιλική"; Μην ξεχνάμε ότι η εφαρμογή θα παίζει σε εταιρικό περιβάλλον οπότε η μελλοντική δυνατότητα να συνδέομαι στην βάση μέσω Internet σε αυτήν την φάση είναι δευτερεύων, που ίσως στην τελική ευθεία να μην χρειάζεται να γίνει,&amp;nbsp;αλλά καλό είναι να το έχουμε στο μυαλό μας. &lt;/P&gt;</description></item><item><title>Απ: Αυτόματη ενημέρωση εφαρμογής</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/45257.aspx</link><pubDate>Wed, 08 Oct 2008 18:53:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:45257</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/45257.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=45257</wfw:commentRss><description>&lt;P&gt;Έχουμε κάνει σχετικές κουβέντες στο παρελθόν:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.dotnetzone.gr/cs/forums/thread/40074.aspx"&gt;http://www.dotnetzone.gr/cs/forums/thread/40074.aspx&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.dotnetzone.gr/cs/forums/thread/40589.aspx"&gt;http://www.dotnetzone.gr/cs/forums/thread/40589.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Για να καταλάβω το σενάριο που έχεις, θες δηλαδή να συγχρονίζονται τοπικές βάσεις μεταξύ τους; 'Η με κάποια κεντρική βάση; Ή με κάποια κεντρική βάση αλλά και μεταξύ τους; Και βάσει ποιάς λογικής θα κάνουν refresh τα data τους οι clients;&amp;nbsp;Απ' ότι κατάλαβα, σε ενδιαφέρει ιδιαίτερα ο μηχανισμός του "πότε"; Γενικά, όταν μιλάμε για συγχρονισμό, το θέμα του "πότε" δεν είναι τόσο μεγάλο πρόβλημα, όσο το θέμα του "πως". &lt;/P&gt;</description></item></channel></rss>