Текущий проект я продолжаю работать, экстенсивно использует веб-сервисы и сделан в .net 3.5. Теперь когда мы идем для реализации второй фазы, мы смущены, если мы должны или использовать WCF или веб-сервис, как сделано ранее? Далее есть ли что-либо новое, которое может быть полезным и придумывает .net 4.0 относительно веб-сервисов или WCF.
Мы только что закончили совершенно новый проект, используя WCF вместо веб-сервисов ASMX в первый раз. Мы очень довольны результатами, но знаем, что была крутая кривая обучения. Несмотря на это, мы чрезвычайно довольны общими результатами и знаем, что это основание для всего, что Microsoft делает, идет вперед, и это было полностью стоят боли - бородавки и все.
Быстрые льготы, которые мы получили через ASMX :
1) для внутренних (за брандмауэром) сервисными звонками, мы используем Net: TCP-привязка, которая намного быстрее, чем мыло
2) мы Включено как конечная точка Net: TCP и конечная точка «Web» на той же службе с только обновлением файла конфигурации (никаких изменений кода)
3) мы смогли создать AJAX, поддерживающие retful Web Services с только изменениями и использованием только изменений DataContractjsonserializer, который уже встроен. Чтобы сделать это в противном случае, нам пришлось бы написать HTTP-обработчик (Ashx) и обрабатывать большую часть сериализации JSON и URL-анализа вручную.
4) Поскольку наш сайт необходимо масштабировать для оптимизации производительности и стабильности, мы смотрим преобразование к использованию структуры обмена сообщениями на основе MSMQ, которая является асинхронной и гарантированной и участвует в транзакциях; WCF предоставляет Bindng MSMQ, который требует от изменений в наших службах, не изменяющую в наших сервисах - просто ссылаться на обновления и настройку MSMQ должным образом с существующими сервисами (и добавление атрибутов для транзакционных границ).
Но быть предупрежденным: Действительно инвестируйте в изучение этого (купите синюю книгу о-дворных двор и пройдите через нее). Есть такие вещи, как аргумент-имени - изменения во время разработки, которые на самом деле не нарушают ссылки на обслуживание, а приводят к передаче нулевых аргументов (встроенная версия для обработки перекосов), моделями для хостинга для рассмотрения (Windows Service vs. IIS), а также создание наблюдения (Windows Service vs. Модели и неисправности для всех действительно понимают. Мы не ходили, и у нас были боли. Но мы вспахались вперед и очень довольны нашими учамими, и возможностями гибкости и роста, которые нам больше не привязаны к ASMX!
Это на самом деле не является ответом на ваш вопрос, но просто исследуя проблему дальше. Мне было интересно, имеет ли компилятор проблемы с видом , объявленные в прилагаемом объеме, поэтому попробовал это:
#include <iostream>
template <typename Func>
void do_test(Func pFunc) {
}
template <typename T>
void test_trait(void) {
class Something { public: int foo; };
do_test ([] (T pX) {
Something A; A.foo = 12;
});
}
int main(void) {
test_trait<int> ();
}
здесь, я просто пытаюсь создать локальный тип в прилагаемом объеме и использовать его изнутри лямбда. Это не только не только компилярует (с Visual Studio 2010, Beta 2), но он фактически выбивает компилятор с внутренней ошибкой C1001.
-121--2831547-Существуют разные точки, чтобы рассмотреть вопрос, прежде чем прыгать на WCF:
- WCF - это архитектурно более надежный и способствует передовым опытам.
- Если вы знаете, что вы делаете «шелковистым гладким», если вы не находитесь для поездка.
- У вас есть достаточно времени, чтобы завершить преобразование ваших услуг?
Наконец я бы сказал, что если у вас есть время, блен и мышцы, чтобы сделать обновление. Это стоит того. Если ASMX удовлетворит все потребности, вы можете сохраняться с веб-сервисами.
Два дополнительных аспекта:
Независимо от того, как вы решите это для сервера, вы можете легко потреблять веб-сервисы и услуги WCF, используя только WCF на стороне клиента. Это имеет значение, если вы потребляете несколько услуг одним клиентом.
Вы просили предстоящие темы. Если вы рассматриваете облачные вычисления: можно разместить услуги WCF в Windows Azure.
с WCF или ASMX убедитесь, что вы добавляете свои сервисы на свои страницы с помощью тега ASP: ScriptManager. Для вас будет создан JavaScript Proxies для вас, и это преимущество в том, что вам не нужно вообще разбираться, независимо от базового протокола. Это очень, очень мило. Этот пример является ASMX, но это каждый бит чистый, как с использованием WCF.
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServices/Admin/HospitalLocationService.asmx" InlineScript="true" />
</Services>
</asp:ScriptManager>
Кроме того, вы можете сделать ASMX отправлять JSON, добавив атрибуты ScriptService и ScriptMethod:
<System.Web.Services.WebService(Namespace:="http://www.fujimed.com/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
<ScriptService()> _
Public Class HospitalLocationService
Inherits System.Web.Services.WebService
<WebMethod()> _
<ScriptMethod()> _
Public Function GetAll() As List(Of HospitalLocationEntity)
Return (New HospitalLocation()).GetAll().Data
End Function
<WebMethod()> _
<ScriptMethod()> _
Public Function GetByID(ByVal ID As Integer) As HospitalLocationEntity
Return (New HospitalLocation()).GetHospitalLocation(ID).Data
End Function
End Class
Отрещающая службу без анализа (это то, что делает для вас ScriptManager):
function editLocation(id) {
vRIS.HospitalLocationService.GetByID(id, getComplete, getError);
}
function getComplete(results, context, methodName) {
document.all['txtLocation'].value = results.Location;
document.all['txtInterfaceID'].value = results.InterfaceID;
document.all['selActive'].value = results.Active ? "true" : "false";
document.all['hdnLocationID'].value = results.ID.toString();
}
function getError(errorInfo, context, methodName) {
Alert(methodName + " : " + errorInfo);
document.all['txtLocation'].value = "";
document.all['txtInterfaceID'].value = "";
document.all['selActive'].value = "false";
document.all['hdnLocationID'].value = "";
}
отредактировано для добавления: со всеми вышеуказанными Основываясь на ASMX, я бы все еще прошел WCF, для универсальности и способности определять контракты данных. Также расследуйте услуги WCF RIA; Они нацеливаются на поддержку AJAX, а также Silverlight, и он автоматизирует большую часть конфигурации WCF.
ASMX отлично и просто - но он очень ограничен во многих отношениях:
WCF устраняет это - и предложить гораздо больше за пределы этого. Вы можете принять свои услуги WCF в IIS - или самоуверенно в приложении консоли или выиграть службу NT, как нужно быть. Вы можете подключить ваши услуги WCF, используя HTTP, TCP / IP, MSMQ, одноранговые протоколы, названные трубы для наматывающихся коммуникаций и многое другое.
Я бы определенно рекомендую Вы идете с WCF. Это более сложный, чем ASMX, но он также предлагает просто ооочень гораздо больше возможностей и вариантов!
Что касается ресурсов: есть Центр разработчика MSDN WCF , который имеет все от учебных пособий для начинающих к статьям и примером кода.
Кроме того, я бы порекомендовал, чтобы вы посмотрели на Pluralsight Screen Chasts на WCF - это отличная серия, идущая от «, создавая вашу первую службу WCF » и « Создание вашего первого клиента WCF «Всю путь к довольно продвинутым темам. Aaron Skonnard Очень красиво объясняет все в 10-15 минут скринкасты - настоятельно рекомендуется!