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

Не работает, а точнее студия не может найти ЗАПУЩЕННЫЙ сервис ни на wsDualHttpBinding, ни на netTcpBinding, т.е. хочу сделать клиент и сгенерить для него прокси класс и конфиг, в окне "Add Service Reference" в поле "Address" ввожу адрес запущеного сервиса (в примере "net.tcp://localhost/wcf_server") но студия говорит что нет такого =(

В чем может быть ошибка? Вот код сервиса и его конфиг.

Код сервера:
Код: 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.
Imports System
Imports System.ServiceModel
Imports System.ServiceModel.Description

<ServiceContract(CallbackContract:=GetType(IMyServiceCallback))> _
Public Interface IMyService

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

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

End Interface

<ServiceContract()> _
Public Interface IMyServiceCallback

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

End Interface

Public Class MyService
    Implements IMyService

    Public Sub GoMessage(ByVal Text As String) Implements IMyService.GoMessage

    End Sub

    Public Function Register(ByVal Name As String) As Boolean Implements IMyService.Register

    End Function

End Class

Public Class MyServiceCallback
    Implements IMyServiceCallback

    Public Sub GoMessage(ByVal Text As String) Implements IMyServiceCallback.GoMessage

    End Sub

End Class

Module Module1

    Sub Main()
        Try
            Console.WriteLine("Запуск сервера...")
            Dim d = MetadataExchangeBindings.CreateMexHttpBinding
            Dim SH As New ServiceHost(GetType(MyService), New Uri("net.tcp://localhost/wcf_server"))
            SH.Open()
            Console.WriteLine("Сервер запущен.")
            Console.WriteLine("-----------------------------------------")
            Console.ReadLine()
            SH.Close()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
        Console.ReadLine()
    End Sub

End Module


Конфиг:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version = "1.0" encoding = "utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name = "WCF_Server.MyService">
        <endpoint 
          address = "" 
          binding = "netTcpBinding"
          bindingConfiguration = "MyTcpBinding"
          contract = "WCF_Server.IMyService" />
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="MyTcpBinding">
          <security mode="Message">
            <message clientCredentialType="Windows"/>
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>


Windows Seven, FW 3.5
...
Рейтинг: 0 / 0
netTcpBinding
    #37328219
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__,

А где привязка MEX ? она тоже должна быть в конфигурационном файле.

То есть для генерации клиента сервис должен сам отдавать свою структуру (метаданные) генератору как раз по этому мексу.

:)

Для проверки правильной подключенности мекса есть такая вещь -

запустите консоль студии и уже в ней - wcftestclient.exe

Запустится утилита, которая умеет обращаться к серверу за метаданными.
...
Рейтинг: 0 / 0
netTcpBinding
    #37328246
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели ни у кого нет идей?
...
Рейтинг: 0 / 0
netTcpBinding
    #37328250
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129__Pavel__,

А где привязка MEX ? она тоже должна быть в конфигурационном файле.

То есть для генерации клиента сервис должен сам отдавать свою структуру (метаданные) генератору как раз по этому мексу.

:)

Для проверки правильной подключенности мекса есть такая вещь -

запустите консоль студии и уже в ней - wcftestclient.exe

Запустится утилита, которая умеет обращаться к серверу за метаданными.

Стойте mex ведь вроде работает только с ...HttpBinding? Или нет?
...
Рейтинг: 0 / 0
netTcpBinding
    #37328284
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__Стойте mex ведь вроде работает только с ...HttpBinding? Или нет?

Или нет. Есть MEX для всех типов сетевой привязки.

Без него вы построить клиента визардом не сможете - хотя можно написать самому.

В принципе - MEX привязка - это для удобства разработки клиентов - для использования сервиса он не нужен.
...
Рейтинг: 0 / 0
netTcpBinding
    #37329038
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот переписал код с настройкой сервиса в коде и добавлением MEX:
Код: 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.
Module Module1
    Sub Main()
        Try
            Console.WriteLine("Запуск сервера...")
            Dim NTB As New NetTcpBinding()
            Dim SH As New ServiceHost(GetType(MyService))

            NTB.Security.Mode = SecurityMode.Transport
            NTB.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows
            NTB.Security.Message.ClientCredentialType = TcpClientCredentialType.Windows
            SH.Description.Behaviors.Add(New ServiceMetadataBehavior)
            SH.AddServiceEndpoint(GetType(IMetadataExchange), NTB, "net.tcp://localhost:8080/wcf_server")
            SH.AddServiceEndpoint(GetType(IMyService), MetadataExchangeBindings.CreateMexTcpBinding(), "net.tcp://localhost:8080/wcf_server/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

End Module


Но все равно ничего не находит... и тестовый клиент тоже...
...
Рейтинг: 0 / 0
netTcpBinding
    #37329292
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Pavel__,


Ну так наверное тоже можно - но я бы рекомендовал создать солюшен из темплейта WCF сервис, и взять апп конфиг оттуда.

там сразу идет добавление МЕХ - привязки.

И только поправить для своего сервиса - адреса и имя контракта.

а при запуске - ничего не менять - хост сам полезет в конфиг и возьмет все что нужно по имени контакта.

Заодно потом менять легче будет все.


Есть же инструменты в студии - правый клик на апп.конфиг в солюшене - и выбрать "Edit WCF configuration".
К тому же это отдельная прога - ее можно и без студии запускать....
...
Рейтинг: 0 / 0
netTcpBinding
    #37330045
__Pavel__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все разобрался, последний вариант был рабочим, просто все дело в моей невнимательности...
Я случайно перепутал контракты...
Код: plaintext
1.
            SH.AddServiceEndpoint(GetType(IMetadataExchange), NTB, "net.tcp://localhost:8080/wcf_server")
            SH.AddServiceEndpoint(GetType(IMyService), MetadataExchangeBindings.CreateMexTcpBinding(), "net.tcp://localhost:8080/wcf_server/mex")

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


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