|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
Пытаюсь создать службу с несколькими привязками, ориентируясь по примеру из книги "Основы WCF для .NET Framework 3.5". В книжке есть в качестве примера кусок файла конфигурации: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Я пытаюсь реализовать несколько привязок кодом (ну так мне надо!): Код: plaintext 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Как только я делаю Код: plaintext
System.ServiceModel.EndpointNotFoundException не обработано Message=Не удалось подключиться к net.tcp://192.168.1.203:8000/MyTCPTestServices/MS. Попытки подключения выполнялись в течение интервала времени 00:00:01.0680000. Код ошибки TCP 10051: Сделана попытка выполнить операцию на сокете при отключенной сети 192.168.1.203:8000. Когда Код: plaintext
Как правильно организовать несколько привязок для одной службы? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 14:56 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
Lexxxxx, а если вместо selfHost.AddServiceEndpoint(typeof(MyServiceInterface), binding, baseAddress + "/MyTCPTestServices/MS"); задавать selfHost.AddServiceEndpoint(typeof(MyServiceInterface), binding, new Uri("net.tcp://localhost:8000/MyTCPTestServices/MS")); ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 18:24 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
LR, А что делать с selfHost.BaseAdresses? Или задание базового адреса(ов) не обязательно? Вообще, толком не понимаю что с этими адресами делать! Как я думал раньше адреса конечных точек равны BaseAdress + адрес точки, указанный в методе selfHost.AddServiceEndpoint. Но если BaseAdresses это массив, то как система определит, к какому именно базовому адресу добавлять адрес из selfHost.AddServiceEndpoint? Или это будет добавлено ко всем базовым адресам и конечная точка будет доступна по всем адресам? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 20:28 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
Lexxxxx, думаю, проблема в лишнем слеше - "/" т.е., baseAddress(.ToString()) +"/MyTCPTestServices/MS"= "net.tcp://localhost:8000//MyTCPTestServices/MS" если причина в этом, то задавайте либо полностью, либо так selfHost.AddServiceEndpoint(typeof(MyServiceInterface), binding, "MyTCPTestServices/MS"); selfHost.AddServiceEndpoint(typeof(MyServiceInterface), httpBinding, "MyTCPTestServices/MS"); а WCF по биндингу (по идее) сам определит базовые адреса... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 20:56 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
LRлибо полностью в т.ч. можно ж так selfHost.AddServiceEndpoint(typeof(MyServiceInterface), binding, baseAddress + "MyTCPTestServices/MS"); selfHost.AddServiceEndpoint(typeof(MyServiceInterface), httpBinding, baseHttpAddress + "MyTCPTestServices/MS"); главное - чтобы не двоился слеш ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 20:58 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
Lexxxxx, вдогонку - если задавать адреса полностью, то, разумеется, Endpoint-у пофиг какие базовые адреса у ServiceHost-а ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 21:01 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
вдогонку - если задавать адреса полностью, то, разумеется, Endpoint-у пофиг какие базовые адреса у ServiceHost-а[/quot] Т.е. если в точке указан полный адрес (т.е. начинающийся с имени одно из известных протоколов?) базовые адреса службы игнорируются? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 21:04 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
LexxxxxТ.е. если в точке указан полный адрес (т.е. начинающийся с имени одно из известных протоколов?) базовые адреса службы игнорируются? да, например, надо слушать на нескольких портах, в т.ч. и на базовом 8001, пишем selfHost.AddServiceEndpoint(typeof(MyServiceInterface), httpBinding, "MyTCPTestServices/MS"); selfHost.AddServiceEndpoint(typeof(MyServiceInterface), httpBinding, " http://localhost:8002/MyTCPTestServices/MS"); selfHost.AddServiceEndpoint(typeof(MyServiceInterface), httpBinding, " http://localhost:8003/MyTCPTestServices/MS"); ...и т.д. - должно работать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2010, 21:12 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
LR, Сделал так: Код: plaintext 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62.
Имеем исключение: Не удалось подключиться к net.tcp://192.168.1.203:8000/MyTCPTestServices/MS. Попытки подключения выполнялись в течение интервала времени 00:00:01.0520000. Код ошибки TCP 10051: Сделана попытка выполнить операцию на сокете при отключенной сети 192.168.1.203:8000. Если убрать подключение второй точки Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2010, 09:10 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
а наоборот, вторая точка без первой работает? открывается ли порт telnet-ом? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2010, 14:09 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
LR, Похоже я нещадно туплю! То Uri к стрингу прибавлял не подумав про слеш, теперь оказалось что я забыл студию от админа запустить. Хотя я был в подобной ситуации и тогда студия говорила что "не удалось зарегистрировать адрес... Запустите от администратора...". Сейчас она ничего не говорила, но именно это ей было надо. Точки запустились. Один из клиентов работает. Второй еще не написан. :) Большое Вам спасибо за помощь! P.S. А на одном порту как я понимаю две разных привязки не могут работать, но могут две службы с разными именами, но одним протоколом? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2010, 14:33 |
|
Раскрытие контракта о службе с помощью нескольких привязок
|
|||
---|---|---|---|
#18+
LexxxxxP.S. А на одном порту как я понимаю две разных привязки не могут работать, но могут две службы с разными именами, но одним протоколом? наверное нет и нет, "слушатель" может быть только один, но нетрудно проверить на практике... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2010, 15:16 |
|
|
start [/forum/topic.php?fid=19&fpage=23&tid=1397525]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
114ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 241ms |
total: | 465ms |
0 / 0 |