powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: дуплесные операции. Как подключить клиент????
9 сообщений из 9, страница 1 из 1
WCF: дуплесные операции. Как подключить клиент????
    #37322821
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!

Есть необходимость создать сервер и подключить к нему клиентов для дуплексного обмена информацией...

Вот мой неудавшийся код, он дописан не до конца, но клиент даже не может запуститься:

Код: 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.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
Imports System
Imports System.ServiceModel
Imports System.ServiceModel.Description

<ServiceContract(SessionMode:=SessionMode.Required, CallbackContract:=GetType(IServiceCallback))> _
Public Interface IService

    <OperationContract(IsOneWay:=True)> _
    Sub GoMessage(ByVal Text As String)

    <OperationContract()> _
    Function Register(ByVal Name As String) As Boolean

End Interface

<ServiceContract()> _
Public Interface IServiceCallback

    <OperationContract(IsOneWay:=True)> _
    Sub GoMessage(ByVal Text As String)

End Interface

<ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single, ConcurrencyMode:=ConcurrencyMode.Reentrant)> _
Public Class Service
    Implements IService

    Public Sub GoMessage(ByVal T As String) Implements IService.GoMessage
        Console.WriteLine("Входящее сообщение от клиента:")
        Console.WriteLine("{0}: {1}", Now.ToLocalTime(), T)
        Console.WriteLine("-----------------------------------------")
    End Sub

    Public Function Register(ByVal Name As String) As Boolean Implements IService.Register
        Clients.Add(Name, OperationContext.Current.GetCallbackChannel(Of IServiceCallback))
    End Function

End Class

<CallbackBehavior(UseSynchronizationContext:=False)> _
Public Class ServiceCallback
    Implements IServiceCallback

    Public Sub GoMessage(ByVal T As String) Implements IServiceCallback.GoMessage
        Console.WriteLine("Входящее сообщение от сервера:")
        Console.WriteLine("{0}: {1}", Now.ToLocalTime(), T)
        Console.WriteLine("-----------------------------------------")
    End Sub

End Class

Module Module1

    Public Clients As New Hashtable

    Public Function ValidName(ByVal Name As String) As Boolean

        Return Clients.ContainsKey(Name)
    End Function

    Sub Main()
        Console.WriteLine("Выбирите режим: 1 - сервер, 2 - клиент.")
        If Console.ReadLine = "1" Then
            StartServer()
        Else
            StartClient()
        End If
    End Sub

    Private Sub StartServer()
        Try
            Console.WriteLine("Введите порт сервера.")
            Dim Port As String = Console.ReadLine
            Console.WriteLine("Запуск сервера...")
            Dim SH As New ServiceHost(GetType(Service), New Uri("net.tcp://localhost:" & Port & "/wcf_test"))
            SH.AddServiceEndpoint(GetType(IService), New NetTcpBinding(SecurityMode.Message, True), "")
            Dim behavior As New ServiceMetadataBehavior()
            SH.Description.Behaviors.Add(behavior)
            SH.AddServiceEndpoint(GetType(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "net.tcp://localhost:" & Port & "/wcf_test/mex")

            SH.Open()
            Console.WriteLine("Сервер запущен.")
            Console.WriteLine("-----------------------------------------")
            Console.ReadLine()
            SH.Close()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        Console.ReadLine()
    End Sub


    Private Sub StartClient()
        Try
            Dim name As String = ""
            Console.WriteLine("Введите порт сервера.")
            Dim Port As String = Console.ReadLine
            Console.WriteLine("Запуск клиента...")

            Dim factory As DuplexChannelFactory(Of IService) = New DuplexChannelFactory(Of IService)(GetType(Service), New NetTcpBinding(SecurityMode.None))
            Dim cl As IService = factory.CreateChannel(New EndpointAddress("net.tcp://localhost:" & Port & "/wcf_test"))


            cl.Register("ClientName")
            Console.WriteLine("Клиент запущен.")
            Console.WriteLine("-----------------------------------------")
            Console.ReadLine()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        Console.ReadLine()
    End Sub

End Module


Говорит что нельзя создать CreateChannel... помогите найти ошибку (или много ошибок ).

Буду очень признателен за помощь!
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37323295
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__,

А зачем самому возиться с каналами? Почему не воспользоваться клиентским классом, который сгенерировала студия?
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37323761
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxx__Pavel__,

А зачем самому возиться с каналами? Почему не воспользоваться клиентским классом, который сгенерировала студия?

Вы же сами недавно сказали что не любите конфиги, и теперь сами предлагаете этим пользоваться... или вы о чем?

Мне нужно полностью программная реализация... я не хочу каждый раз при изменении сервера генерить новый класс для клиента!
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37323817
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__,

Конфиги тут вроде не при чем.
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37323827
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__,

А что значит "при изменении сервера"? Если вы добавите или измените существующий интерфейс(класс) службы, то перегенерировать проксикласс вам придется все равно (ну конечно можно извратиться и написать его самому, но зачем?)
А в конфигах находится вспомогательная информация, такая как адрес службы, параметры шифрования и т.п.
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37324098
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxx__Pavel__,

А что значит "при изменении сервера"? Если вы добавите или измените существующий интерфейс(класс) службы, то перегенерировать проксикласс вам придется все равно (ну конечно можно извратиться и написать его самому, но зачем?)
А в конфигах находится вспомогательная информация, такая как адрес службы, параметры шифрования и т.п.

В этом вся и проблема... У меня сервер и клиент = ОДИН ПРОЕКТ!!!! И два конфига туда не запишешь, да и как студия в проект сгенерит класс который УЖЕ ТАМ ЕСТЬ...

Мне нужно научиться ВСЕ делать в коде... но ВСЕ примеры направлены на эти конфиги (чтоб их)... я уже не знаю что и делать... может от технологии отказаться и искать решение на стороне, раз никто не умеет это делать...

А ведь проблема решается в пару строк... тут как я смотрю идет дело принципа...
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37324110
Lexxxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__. У меня сервер и клиент = ОДИН ПРОЕКТ!!!!

Это как и зачем?!?!
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37324255
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lexxxxx__Pavel__. У меня сервер и клиент = ОДИН ПРОЕКТ!!!!

Это как и зачем?!?!

Тынц там правда не дуплексное соединение...

И вобще какая разница зачем, надо, значит надо...
...
Рейтинг: 0 / 0
WCF: дуплесные операции. Как подключить клиент????
    #37325740
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__Lexxxxx__Pavel__,

А что значит "при изменении сервера"? Если вы добавите или измените существующий интерфейс(класс) службы, то перегенерировать проксикласс вам придется все равно (ну конечно можно извратиться и написать его самому, но зачем?)
А в конфигах находится вспомогательная информация, такая как адрес службы, параметры шифрования и т.п.

В этом вся и проблема... У меня сервер и клиент = ОДИН ПРОЕКТ!!!! И два конфига туда не запишешь, да и как студия в проект сгенерит класс который УЖЕ ТАМ ЕСТЬ...

Мне нужно научиться ВСЕ делать в коде... но ВСЕ примеры направлены на эти конфиги (чтоб их)... я уже не знаю что и делать... может от технологии отказаться и искать решение на стороне, раз никто не умеет это делать...

А ведь проблема решается в пару строк... тут как я смотрю идет дело принципа...

т.е. вы взяли автомобиль и пытаетесь из него сделать самокат, даже не велосипед...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF: дуплесные операции. Как подключить клиент????
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]