КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Режимы параллельного вызова(ConcurrencyMode)
Когда нужен режим Reentrant? Например, есть служба в режиме Single, вызывающая другую службу. Клиент делает свой вызов к первой службе, она использует для реализации своего функционала внешнюю службу и вызывает вторую, которая снова вызывает первую. Если такое произойдет, получится deadlock (бесконечное ожидание), поскольку первая служба поставит вызов второй в очередь после клиента, а вызов клиента будет ожидать окончания этого вызова, стоящего за ним в очереди. Чтобы избежать такой ситуации, нужен режим Reentrant. 33.6 Пример веб-службы с применением WCF: ручная конфигурация службы Пример ручного конфигурирования службы:
static void Main() { var host = new ServiceHost(typeof(WeatherService));
var tcpBinding = new NetTcpBinding(SecurityMode.None, false); tcpBinding.MaxBufferPoolSize = int.MaxValue; tcpBinding.MaxBufferSize = int.MaxValue; tcpBinding.MaxReceivedMessageSize = int.MaxValue; tcpBinding.PortSharingEnabled = false; tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.None; host.AddServiceEndpoint("WcfServiceLibrary1.IWeatherService", tcpBinding, "net.tcp://localhost:5555/Design_Time_Addresses/WcfServiceLibrary1/WeatherService/"); var wsHttpBinding = new WSHttpBinding(SecurityMode.Message); host.AddServiceEndpoint("WcfServiceLibrary1.IWeatherService", wsHttpBinding, "http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/WeatherService/");
host.Open(); Console.WriteLine("Press ENTER to stop the service"); Console.ReadLine(); }
В примере создается служба с двумя точками доступа: одна точка доступа – по протоколу HTTP через порт 8731, а вторая – по протоколу TCP в бинарном виде через порт 5555.
С помощью ручного конфигурирования можно проделать все те действия, которые выполняет система при создании службы при помощи файла App.config. Для реальных систем предпочтительнее использовать файл App.config, позволяющий переносить службу на другой компьютер без перекомпиляции. Кроме того, пример показывает возможность работы двух служб на одном порте.
Дата добавления: 2014-11-16; Просмотров: 342; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |