Должен ли я пойти на WCF или просто файл Razor / cshtml для создания служб? - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть старые веб-формы, которые должны быть расширены с помощью некоторых функций ajax.Я обновился до .net 4, но мне интересно, какой подход использовать при создании новых сервисов.

У меня нет особого опыта написания сервисов wcf, и кажется, что гораздо проще просто написатьсервис, использующий простой файл cshtml, такой как:

@{    
    var db = Database.Open("MyConnectionString); 
    var data = db.Query("SELECT * FROM MyTable WHERE Col1 = @0", '123');
    Json.Write( new { results=data}, Response.Output);
}

Какие подводные камни используют эту стратегию по сравнению с созданием сервиса wcf?

Спасибо за любую помощь

Larsi

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

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

0 голосов
/ 12 января 2012

Одним из соображений, не упомянутых в других ответах, является производительность Json.Write. Он хорошо работает для небольших наборов записей с несколькими столбцами, но я заметил, что он значительно медленнее с , всего лишь ~ 70 записей и 10 столбцов . Это особенно важно в контексте веб-приложения, которое вы «Ajaxifying», где вы обычно пытаетесь сделать приложение более отзывчивым на взаимодействия с пользователем. В этих случаях я обычно использую Json.Write только для того, чтобы получить доказательство работоспособности концепции, но затем вернусь к тому, чтобы вернуться и изменить страницу бритвы, чтобы пройтись по возвращенным записям и построить строку JSON с StringBuilder и написать это на выход.

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

0 голосов
/ 22 ноября 2011

Используя WCF, вы можете сделать:

[OperationContract]
public UserNow GetCurrentUser()
{
    string UserName = Membership.GetUser().UserName; 
    string UserToView = Request.Params["UserToView"];
    //do a bunch of things.
    return UserNow;
}

Преимущества?

  • Он строго типизирован (вы не можете вернуть строку, логический или новый FooBar () или просто ничего вообще, в то время как вы можете Response.Write все или ничего, что вам нравится)
  • Генерируется WSDL, который клиенты могут использовать, чтобы они знали, какие операции они могут выполнять и какие типы данных отправляются
  • Используя WCF, вы можете легко добавить еще одну привязку для поддержки другого диапазона клиентов (basicHttp иwsHttp для веб-сервисов, netTcp для более эффективного общения с другими клиентами, написанными на .NET), в то время как вам не нужно менять какой-либо код

И, вероятно, есть еще масса других вещейзабыть.

...