Как я выбираю между WCF, REST, POX и сервисами RIA для нового приложения Silverlight

Если Вы заканчиваете тем, что использовали скопление, вот некоторый код, чтобы сделать это:

use Fcntl ':flock'; # Import LOCK_* constants

# We will use this file path in error messages and function calls.
# Don't type it out more than once in your code.  Use a variable.
my $file = '/path/to/some/file';

# Open the file for appending.  Note the file path is quoted
# in the error message.  This helps debug situations where you
# have a stray space at the start or end of the path.
open(my $fh, '>>', $file) or die "Could not open '$file' - $!";

# Get exclusive lock (will block until it does)
flock($fh, LOCK_EX) or die "Could not lock '$file' - $!";

# Do something with the file here...

# Do NOT use flock() to unlock the file if you wrote to the
# file in the "do something" section above.  This could create
# a race condition.  The close() call below will unlock the
# file for you, but only after writing any buffered data.

# In a world of buffered i/o, some or all of your data may not 
# be written until close() completes.  Always, always, ALWAYS 
# check the return value of close() if you wrote to the file!
close($fh) or die "Could not write '$file' - $!";

Некоторые полезные ссылки:

В ответ на Ваш добавленный вопрос, я сказал бы или поместить блокировку в файл или создать файл, что Вы называете 'блокировку' каждый раз, когда файл заблокирован, и удалите его, когда это больше не блокируется (и затем удостоверьтесь, что Ваши программы повинуются тем семантика).

22
задан Gilles 'SO- stop being evil' 25 March 2012 в 20:06
поделиться

3 ответа

Мои два цента (евро):

WCF кажется наиболее подходящим, когда службу можно рассматривать как бизнес-уровень приложения, то есть когда ваша служба имеет "интеллектуальный" «операции типа « CalculateDiscountForClient ».

Службы данных ADO.NET (на самом деле, просто реализация REST) ​​кажутся подходящими, когда ваше приложение в основном ориентировано на данные, а служба - просто перед конец для базы данных. То есть все ваши методы обслуживания относятся к типу GetCustomers, CreateInvoice, и т. Д.

Службы RIA - это совершенно новая технология, с которой я еще не экспериментировал, но она кажется полезной для создания приложений, в которых часть Silverlight и служба очень тесно связаны: вы определяете свои классы и методы службы в проекте службы, и они автоматически реплицируются в проект Silverlight во время разработки. Кроме того, можно определить как методы «действия» в стиле WCF, так и методы «данных» в стиле служб данных ADO.NET. Выглядит многообещающе.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, - это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

и они автоматически копируются в проект Silverlight во время разработки. Кроме того, можно определить как методы «действия» в стиле WCF, так и методы «данных» в стиле служб данных ADO.NET. Выглядит многообещающе.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, - это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

и они автоматически копируются в проект Silverlight во время разработки. Кроме того, вы можете определить как методы «действия» в стиле WCF, так и методы «данных» в стиле ADO.NET Data Services. Выглядит многообещающе.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, - это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

вы можете определить как методы «действия» в стиле WCF, так и методы «данных» в стиле служб данных ADO.NET. Выглядит многообещающе.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

вы можете определить как методы «действия» в стиле WCF, так и методы «данных» в стиле служб данных ADO.NET. Выглядит многообещающе.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, - это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

Используйте POX , если есть вероятность, что вы измените клиентскую часть с Silverlight на любую другую технологию (например, HTML + AJAX) в будущем, поскольку это наиболее совместимый вариант.

Что касается различий для WPF, единственное, что я могу придумать, - это то, что для доступа к данным, когда это возможно, я бы использовал прямые подключения к данным ADO.NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо Службы данных ADO.NET, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т. П.) Вместо ADO.NET Data Services, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

NET (правильно встроенные в уровень доступа к данным, LINQ to SQL и т.п.) вместо ADO.NET Data Services, поскольку они более гибкие. В любом случае должен сказать, что я никогда ничего не разрабатывал в WPF.

9
ответ дан 29 November 2019 в 05:38
поделиться

Думаю, я бы больше никогда не пошел в POX. Если вы пишете WCF так, чтобы сама служба не зависела от привязки, а привязка выполнялась в файлах конфигурации, то WCF практически не зависит от транспорта и протокола. Он может выполнять SOAP, JSON, REST или собственную форму двоичной сериализации. Все это есть в переплете. Внутри WCF указывает только то, что отображается в терминах операций и контрактов данных (все определяется атрибутами класса, метода и свойства). WCF дает вам огромную гибкость в этом отношении, и в 2010 году будет еще больше.

Со стороны Silverlight WCF требует, чтобы вы написали некоторый внутренний код. В .NET frameowrk есть инструменты для создания прокси в вашем проекте Silverlight, но вы должны быть готовы обрабатывать все ответы WCF асинхронно, и прокси не может перехватывать исключения, создаваемые службой.

.NET RIA Services все это скрывает. Он использует WCF под прикрытием, но это полностью скрыто. Вам не нужно писать асинхронный код. Вы определяете валидацию один раз, в основном декларативно, и она работает как на стороне сервера, так и на стороне клиента. Выпуск 1 будет ориентирован на Silverlight, поэтому вы не получите универсальности для использования этой службы где-либо еще. Предполагается, что эта область будет расширена в более поздних выпусках.

Я недостаточно знаю о службах данных ADO.NET для сравнения. Я подозреваю, что ответ будет зависеть от того, хотите ли вы, чтобы ваши данные были доступны не только для Silverlight.

.NET RIA Services выглядит как то направление, в котором я хотел бы двигаться (глядя на эти проблемы самостоятельно, с большим приложением в разум). Для меня большой проблемой будет реализация очень большого набора функций на уровне сервиса и невозможность кодирования непосредственно на уровне доступа к данным (мы должны иметь возможность работать либо на SQL Server, либо на Oracle).

Использование WPF вместо Silverlight меняет все в зависимости от того, где находятся ваши данные. Это похоже на старый вопрос Winforms vs. ASP.NET. С помощью WPF вы создаете клиентское приложение для Windows, и вам вообще не нужно использовать какую-либо форму интерфейса данных на основе служб, если только доступ к данным не вынуждает вас к этому. Вы по-прежнему захотите отделить данные и бизнес от кода презентации с помощью MVVM, MVC или MVP. Помимо этого, у вас есть возможность рассматривать доступ к данным как уровень, а не как полностью независимый уровень.

и невозможность кодирования непосредственно на уровне доступа к данным (мы должны иметь возможность работать на SQL Server или Oracle).

Использование WPF вместо Silverlight меняет все, в зависимости от того, где находятся ваши данные. Это похоже на старый вопрос Winforms vs. ASP.NET. С помощью WPF вы создаете клиентское приложение для Windows, и вам вообще не нужно использовать какую-либо форму интерфейса данных на основе служб, если только доступ к данным не вынуждает вас к этому. Вы по-прежнему захотите отделить данные и бизнес от кода презентации с помощью MVVM, MVC или MVP. Помимо этого, у вас есть возможность рассматривать доступ к данным как уровень, а не как полностью независимый уровень.

и невозможность кодирования непосредственно на уровне доступа к данным (мы должны иметь возможность работать на SQL Server или Oracle).

Использование WPF вместо Silverlight меняет все, в зависимости от того, где находятся ваши данные. Это похоже на старый вопрос Winforms vs. ASP.NET. С помощью WPF вы создаете клиентское приложение для Windows, и вам вообще не нужно использовать какую-либо форму интерфейса данных на основе служб, если только доступ к данным не вынуждает вас к этому. Вы по-прежнему захотите отделить данные и бизнес от кода презентации с помощью MVVM, MVC или MVP. Помимо этого, у вас есть возможность рассматривать доступ к данным как уровень, а не как полностью независимый уровень.

как старый вопрос Winforms vs. ASP.NET. С помощью WPF вы создаете клиентское приложение для Windows, и вам вообще не нужно использовать какую-либо форму интерфейса данных на основе служб, если только доступ к данным не вынуждает вас к этому. Вы по-прежнему захотите отделить данные и бизнес от кода презентации с помощью MVVM, MVC или MVP. Помимо этого, у вас есть возможность рассматривать доступ к данным как уровень, а не как полностью независимый уровень.

как старый вопрос Winforms vs. ASP.NET. С помощью WPF вы создаете клиентское приложение для Windows, и вам вообще не нужно использовать какую-либо форму интерфейса данных на основе служб, если только доступ к данным не вынуждает вас к этому. Вы по-прежнему захотите отделить данные и бизнес от кода презентации с помощью MVVM, MVC или MVP. Помимо этого, у вас есть возможность рассматривать доступ к данным как уровень, а не как полностью независимый уровень.

3
ответ дан 29 November 2019 в 05:38
поделиться

Мы используем RIA, и это единственный из известных мне вариантов, но я знаю его, поэтому вот некоторые из моих мыслей.

RIA еще не закончено. Над этим работают. Если вы планируете закончить работу в ближайшее время и беспокоитесь о том, что придется поддерживать что-то, что может немного измениться, тогда вы можете рассмотреть другие варианты. Если это новый проект, и вы собираетесь поддерживать его в течение длительного времени, RIA, вероятно, станет проще в использовании.

Сказав это, я думаю, что в работе июльского предварительного просмотра RIA и в том, как будет работать законченная версия, не будет много изменений. Также уровень поддержки, похоже, предполагает, что это станет «способом» общения с сервером в Silverlight.

Просто потому, что это стоит упомянуть, есть несколько ссылок:

http://blogs.msdn.com/brada/ У Брэда Абрамса есть пример, который он постоянно обновляет.

http://forums.silverlight.net/forums/53.aspx Здесь вы можете задать вопросы.

http://www.riaservicesblog.com/Blog/ Колин Блэр знает свое дело и очень помогает.

5
ответ дан 29 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: