Привет всем
У меня сейчас проблема с вызовом службы WCF из службы Windows. Мое решение для приложений выглядит следующим образом.
- Консоль веб-администрирования (веб-проект)
- Центральный контроль (служба Windows)
- Служба WCF, чтобы консоль веб-администрирования могла подключиться к ней и настроить ее
- Несколько вызовов для использования WCF на узле (служба Windows)
- Узел (служба Windows)
- Служба WCF, позволяющая службе Central Control Windows настроить ее
Консоль веб-администрирования может обращаться к WCF центрального управления, но время ожидания центрального управления истекает, когда она пытается подключиться к узлу. При тестировании я создал приложение Launcher, которое представляет собой простой проект Windows Form, который создает экземпляр каждой службы и имеет несколько кнопок, которые используют функцию WCF в каждой из служб Windows (просто чтобы увидеть, что не удалось), это приложение Launcher не может говорить ни с одной из служб Windows. Это меня смутило, поэтому я добавил те же кнопки в веб-форму в веб-консоли администрирования, и она отлично подключалась к обоим службам Windows через WCF. Я знаю, что материал WCF работает, так как я могу просмотреть его через IE и увидеть весь замечательный XML (и, очевидно, тот факт, что вызовы работают из веб-приложения, является хорошим показателем того, что он работает и работает)
Короче
Мои веб-приложения могут использовать службы WCF в моих службах Windows, а службы Windows Forms и Windows - нет. Почему это??
У меня уже почти закончилось время для этого проекта, поэтому быстрые ответы были бы потрясающими!
Технические данные / Код детали
Я не использую файлы конфигурации в приложениях. Все создается с помощью кода, и я использую один и тот же код, чтобы каждый раз делать свои вызовы WCF. Кроме того, я попытался отключить безопасность повсюду на случай, если это было проблемой. Также я везде использую одни и те же svcutil сгенерированные прокси-файлы, чтобы все это было согласованно
Пример вызова на узел
Dim Bind As New WSHttpBinding(SecurityMode.None, True)
Bind.CloseTimeout = New TimeSpan(0, 0, 10)
Bind.OpenTimeout = New TimeSpan(0, 0, 10)
Bind.SendTimeout = New TimeSpan(0, 0, 10)
Dim client As New BN.BNodeServiceClient(Bind, New EndpointAddress("http://localhost:27374/Node"))
client.sendMessage("Test Message")
client.Close()
Узел, открывающий свой WCF
BNodeHost = New ServiceHost(GetType(iBNodeService))
BNodeHost.AddServiceEndpoint(GetType(BNodeService), New WSHttpBinding(SecurityMode.None, True), New Uri("http://localhost:27374/Node"))
Dim metadataBehavior As ServiceModel.Description.ServiceMetadataBehavior
metadataBehavior = BNodeHost.Description.Behaviors.Find(Of _
ServiceModel.Description.ServiceMetadataBehavior)()
If metadataBehavior Is Nothing Then
metadataBehavior = New ServiceModel.Description.ServiceMetadataBehavior()
metadataBehavior.HttpGetEnabled = True
metadataBehavior.HttpGetUrl = New Uri("http://localhost:27374/Node")
BNodeHost.Description.Behaviors.Add(metadataBehavior)
Else
BNodeHost.Description.Behaviors.Add(metadataBehavior)
End If
BNodeHost.Open()
Все это работало до того, как я сделал разные биты собственными службами Windows и попытался добавить к ним установщики. Инсталляторы работают нормально и устанавливают сервисы, которые запускаются и позволяют мне видеть все WCF XML в IE.
Как вы могли бы сказать, я новичок в WCF, и это мое первое приложение, использующее его. Фундаментальные биты были в значительной степени заданиями копирования / вставки / изменения из примера, в котором не используются файлы конфигурации.
Любая помощь будет принята с благодарностью.