|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
Доброго времени суток, Windows 7x64 SP1. Visual Studio 2015 Update 1. Написал пару простых проектов в составе одного и того же решения: некоторый WCF серфис (self-hosted) и клиент под него. Оба проекта являются консольными приложениями. Для взаимодействия клиента со службой я использую протокол HTTP. Когда служба и клиент находятся на одной машинке, тогда всё работает без проблем. Однако если я перемещаю клиента на другой компьютер, то на стороне клиента получаю такое сообщение об ошибке: Client ApplicationThe communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state. Конфигурационный файл хоста моей службы выглядит так: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Хост службы находится на компьютере win7x64ac2 . Конфигурационный файл клиента, находящегося на другом компьютере такой: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
С клиентской машинки компьютер win7x64ac2 пингуется успешно. Почему, когда клиент находится на др. компьютере - я получаю обозначенную выше ошибку? Может чего-то не хватает в конфигурационных файлах? С уважением, Андрей ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 15:12 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
Compositum, отлавливать и хэндлить ошибки на серверной стороне - это во-первых. Во вторых проверять состояние канала. Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 15:18 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
Axeleron, На стороне клиента у меня такой код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
В консоль выводится, что "CommunicationState: Created", но далее, при попытке вызова методов прокси получаю исключение с сообщением, обозначенным мною ранее. Все пять попыток, выполняемые в цикле - безуспешны. telnet показывает, что порт удалённой машины доступен. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 17:20 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
Compositum, ну так что Created означает? Его поди опен надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 17:25 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
buserCompositum, ну так что Created означает? Его поди опен надо? Хм... В книге Джувел Лёве "Создание служб WCF" автор на стр. 56 демонстрирует использование proxy и явным образом не вызывает db.Open(); Я пробовал вызывать этот метод до вызова интересующих меня методов моего прокси (в частности перед вызовом db.SaveAs(...);), но результат не изменился. Кроме того, ведь когда служба и сервис на одной машине, то работало и без db.Open(); . ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 17:34 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
В стеке событий вижу кучу исключений, которые появляются при вызове db.Open() или при вызова db.SaveAs(...) (если закомментировать db.Open() ). Первое исключение пишет так: Exception thrown: 'System.ComponentModel.Win32Exception' in System.ServiceModel.dll ("The Security Support Provider Interface (SSPI) negotiation failed.") System.ComponentModel.Win32Exception ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 18:20 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
Compositum, а можете объяснить почему contract и address сервиса разные у сервера и клиента? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 18:29 |
|
Почему клиент не находит службу, когда она на др. машине (связь по HTTP)
|
|||
---|---|---|---|
#18+
AxeleronCompositum, а можете объяснить почему contract и address сервиса разные у сервера и клиента? Могу конечно. Адрес разный потому, что клиент и сервис находятся на разных машинах. В виду этого сервис свою машину обозначает как localhost, а клиенту эту машину нужно указывать либо по имени, либо по IP. Одинаковыми они будут лишь в том случае, когда и серсис и клиент находятся на одной и той же машине. Контракт у клиента указывает на интерфейс proxy, который генерируется автоматом средствами IDE. Какое имя пространству там назначаем - то и используется. Назначать это имя можно произвольно - роли не играет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2016, 22:24 |
|
|
start [/forum/topic.php?fid=19&fpage=4&tid=1396780]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 383ms |
0 / 0 |