powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / NetNamedPipeBinding в одном проекте
3 сообщений из 3, страница 1 из 1
NetNamedPipeBinding в одном проекте
    #37570135
gdengam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Простите за ламерский вопрос - это мое первое знакомство со службами, поэтому возможно туплю))) Итак:
Есть классический пример из MSDN: 1 солюшн из двух проектов: в первом сервис, во втором клиент - все работает замечательно:
Код: vbnet
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.
    <ServiceContract()> _
    Public Interface ICalculator
        <OperationContract()> _
        Function Openserv(ByVal n1 As Integer) As Boolean
    End Interface
Public Class Service
    Implements ICalculator

    Dim servicehost As System.ServiceModel.ServiceHost
    Shared str_tb As String

    Private Sub Service_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim baseAddress As Uri = New Uri("http://localhost:8000/ServiceModelSamples/service")
        Dim address As String = "net.pipe://localhost/ServiceModelSamples/service"
        servicehost = New System.ServiceModel.ServiceHost(GetType(Service), baseAddress)
        Dim binding As System.ServiceModel.NetNamedPipeBinding = New System.ServiceModel.NetNamedPipeBinding(System.ServiceModel.NetNamedPipeSecurityMode.Transport)
        binding.CloseTimeout = New TimeSpan(0, 1, 0)
        binding.Name = "Binding1"
        binding.OpenTimeout = New TimeSpan(0, 1, 0)
        binding.ReceiveTimeout = New TimeSpan(0, 10, 0)
        binding.SendTimeout = New TimeSpan(0, 10, 0)
        binding.TransactionFlow = False
        binding.TransactionProtocol = System.ServiceModel.TransactionProtocol.OleTransactions
        binding.TransferMode = System.ServiceModel.TransferMode.Buffered
        binding.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.StrongWildcard
        binding.MaxBufferPoolSize = 524288
        binding.MaxBufferSize = 65536
        binding.MaxConnections = 10
        binding.MaxReceivedMessageSize = 65536
        servicehost.AddServiceEndpoint(GetType(ICalculator), binding, address)
        Dim smb As System.ServiceModel.Description.ServiceMetadataBehavior = New System.ServiceModel.Description.ServiceMetadataBehavior
        smb.HttpGetEnabled = True
        servicehost.Description.Behaviors.Add(smb)
        servicehost.Open()
    End Sub
    End Class


и клиент
Код: vbnet
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.
    <System.ServiceModel.ServiceContract()> _
    Public Interface ICalculatorClient
        <System.ServiceModel.OperationContract()> _
        Function Openserv(ByVal n1 As Integer) As Boolean
    End Interface
    Partial Public Class CalculatorClient
        Inherits System.ServiceModel.ClientBase(Of ICalculatorClient)
        Implements ICalculatorClient

        Public Sub New()
            MyBase.New()
        End Sub

        Public Sub New(ByVal endpointConfigurationName As String)
            MyBase.New(endpointConfigurationName)
        End Sub

        Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
            MyBase.New(endpointConfigurationName, remoteAddress)
        End Sub

        Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
            MyBase.New(endpointConfigurationName, remoteAddress)
        End Sub

        Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)
            MyBase.New(binding, remoteAddress)
        End Sub

        Public Function OpenServ(ByVal n1 As Integer) As Boolean Implements ICalculatorClient.Openserv
            Return MyBase.Channel.Openserv(n1)
        End Function

    End Class
Public Class Client

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim bld As New System.ServiceModel.NetNamedPipeBinding
        Dim epa As New System.ServiceModel.EndpointAddress("net.pipe://localhost/servicemodelsamples/service")
        Dim client As New CalculatorClient(bld, epa)
        Dim value1 As Integer = 33
        Dim result As Boolean = client.OpenServ(value1)
        client.Close()
        MessageBox.Show("Открыто в основном приложении")

    End Sub


Теперь сам вопрос... а как сделать, чтобы клиент можно было сделать, как вызываемую сборку из этого проекта? то есть проект-сервис оставляем и в дописываем следующее:
Код: vbnet
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.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        cr_text()
        cr_app()
    End Sub
    Private Sub cr_text()
        str_tb = "Imports System" & Chr(13) & Chr(10) & _
"Imports System.CodeDom" & Chr(13) & Chr(10) & _
"Imports System.CodeDom.Compiler" & Chr(13) & Chr(10) & _
"Imports System.Collections" & Chr(13) & Chr(10) & _
"Imports System.ComponentModel" & Chr(13) & Chr(10) & _
"Imports System.Diagnostics" & Chr(13) & Chr(10) & _
"Imports System.Windows.Forms" & Chr(13) & Chr(10) & _
"Imports System.Data" & Chr(13) & Chr(10) & _
"Imports System.Windows" & Chr(13) & Chr(10) & _
"Imports System.Data.SqlClient" & Chr(13) & Chr(10) & _
"Imports Microsoft.VisualBasic" & Chr(13) & Chr(10) & _
"Imports System.IO" & Chr(13) & Chr(10) & _
"Imports System.Drawing" & Chr(13) & Chr(10) & _
"Public Class MainClass" & Chr(13) & Chr(10) & _
"Public Shared Sub Main()" & Chr(13) & Chr(10) & _
"Dim tf As New test34" & Chr(13) & Chr(10) & _
"tf.show()" & Chr(13) & Chr(10) & _
"End Sub" & Chr(13) & Chr(10) & _
"End Class" & Chr(13) & Chr(10) & _
   "     <System.ServiceModel.ServiceContract()> _" & Chr(13) & Chr(10) & _
"    Public Interface ICalculator" & Chr(13) & Chr(10) & _
"        <System.ServiceModel.OperationContract()> _" & Chr(13) & Chr(10) & _
"        Function Openserv(ByVal n1 As Integer) As Boolean" & Chr(13) & Chr(10) & _
"    End Interface" & Chr(13) & Chr(10) & _
"    Partial Public Class CalculatorClient" & Chr(13) & Chr(10) & _
"        Inherits System.ServiceModel.ClientBase(Of ICalculator)" & Chr(13) & Chr(10) & _
"        Implements ICalculator" & Chr(13) & Chr(10) & _
"        Public Sub New()" & Chr(13) & Chr(10) & _
"            MyBase.New()" & Chr(13) & Chr(10) & _
"        End Sub" & Chr(13) & Chr(10) & _
"        Public Sub New(ByVal endpointConfigurationName As String)" & Chr(13) & Chr(10) & _
"            MyBase.New(endpointConfigurationName)" & Chr(13) & Chr(10) & _
"        End Sub" & Chr(13) & Chr(10) & _
"        Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)" & Chr(13) & Chr(10) & _
"            MyBase.New(endpointConfigurationName, remoteAddress)" & Chr(13) & Chr(10) & _
"        End Sub" & Chr(13) & Chr(10) & _
"        Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress)" & Chr(13) & Chr(10) & _
"            MyBase.New(endpointConfigurationName, remoteAddress)" & Chr(13) & Chr(10) & _
"        End Sub" & Chr(13) & Chr(10) & _
"        Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress)" & Chr(13) & Chr(10) & _
"            MyBase.New(binding, remoteAddress)" & Chr(13) & Chr(10) & _
"        End Sub" & Chr(13) & Chr(10) & _
"        Public Function OpenServ(ByVal n1 As Integer) As Boolean Implements ICalculator.Openserv" & Chr(13) & Chr(10) & _
"            Return MyBase.Channel.Openserv(n1)" & Chr(13) & Chr(10) & _
"        End Function" & Chr(13) & Chr(10) & _
"    End Class" & Chr(13) & Chr(10) & _
"        <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _" & Chr(13) & Chr(10) & _
"Partial Class test34" & Chr(13) & Chr(10) & _
"    Inherits System.Windows.Forms.Form" & Chr(13) & Chr(10) & _
"    <System.Diagnostics.DebuggerNonUserCode()> _" & Chr(13) & Chr(10) & _
"    Protected Overrides Sub Dispose(ByVal disposing As Boolean)" & Chr(13) & Chr(10) & _
"        Try" & Chr(13) & Chr(10) & _
"        If Disposing AndAlso components IsNot Nothing Then" & Chr(13) & Chr(10) & _
"        components.Dispose()" & Chr(13) & Chr(10) & _
"        End If" & Chr(13) & Chr(10) & _
"        Finally" & Chr(13) & Chr(10) & _
"        MyBase.Dispose(Disposing)" & Chr(13) & Chr(10) & _
"        End Try" & Chr(13) & Chr(10) & _
"    End Sub" & Chr(13) & Chr(10) & _
"        Private components As System.ComponentModel.IContainer" & Chr(13) & Chr(10) & _
"    <System.Diagnostics.DebuggerStepThrough()> _" & Chr(13) & Chr(10) & _
"    Private Sub InitializeComponent()" & Chr(13) & Chr(10) & _
"        Me.Button1 = New System.Windows.Forms.Button" & Chr(13) & Chr(10) & _
"        Me.Button3 = New System.Windows.Forms.TextBox" & Chr(13) & Chr(10) & _
"        Me.SuspendLayout()" & Chr(13) & Chr(10) & _
"        Me.Button1.Location = New System.Drawing.Point(114, 40)" & Chr(13) & Chr(10) & _
"        Me.Button1.Name = " & Chr(34) & "Button1" & Chr(34) & "" & Chr(13) & Chr(10) & _
"        Me.Button1.Size = New System.Drawing.Size(231, 39)" & Chr(13) & Chr(10) & _
"        Me.Button1.TabIndex = 0" & Chr(13) & Chr(10) & _
"        Me.Button1.Text = " & Chr(34) & "Button1" & Chr(34) & "" & Chr(13) & Chr(10) & _
"        Me.Button1.UseVisualStyleBackColor = True" & Chr(13) & Chr(10) & _
"        Me.Button3.Location = New System.Drawing.Point(114, 90)" & Chr(13) & Chr(10) & _
"        Me.Button3.Name = " & Chr(34) & "Button3" & Chr(34) & "" & Chr(13) & Chr(10) & _
"        Me.Button3.Size = New System.Drawing.Size(231, 39)" & Chr(13) & Chr(10) & _
"        Me.Button3.TabIndex = 2" & Chr(13) & Chr(10) & _
"        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)" & Chr(13) & Chr(10) & _
"        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font" & Chr(13) & Chr(10) & _
"        Me.ClientSize = New System.Drawing.Size(465, 133)" & Chr(13) & Chr(10) & _
"        Me.Controls.Add(Me.Button1)" & Chr(13) & Chr(10) & _
"        Me.Controls.Add(Me.Button3)" & Chr(13) & Chr(10) & _
"        Me.Name = " & Chr(34) & "test" & Chr(34) & "" & Chr(13) & Chr(10) & _
"        Me.Text = " & Chr(34) & "test" & Chr(34) & "" & Chr(13) & Chr(10) & _
"        Me.ResumeLayout(False)" & Chr(13) & Chr(10) & _
"    End Sub" & Chr(13) & Chr(10) & _
"        Friend WithEvents Button1 As System.Windows.Forms.Button" & Chr(13) & Chr(10) & _
"        Friend WithEvents Button3 As System.Windows.Forms.TextBox" & Chr(13) & Chr(10) & _
"End Class" & Chr(13) & Chr(10) & _
"Public Class test34" & Chr(13) & Chr(10) & _
"    Dim str_tb As String" & Chr(13) & Chr(10) & _
"    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click" & Chr(13) & Chr(10) & _
"        Dim bld As New System.ServiceModel.NetNamedPipeBinding" & Chr(13) & Chr(10) & _
"        Dim epa As New System.ServiceModel.EndpointAddress(" & Chr(34) & "net.pipe://localhost/servicemodelsamples/service" & Chr(34) & ")" & Chr(13) & Chr(10) & _
"        Dim client As New CalculatorClient(bld, epa)" & Chr(13) & Chr(10) & _
"        Dim value1 As Integer = Button3.Text" & Chr(13) & Chr(10) & _
"        Dim result As Boolean = client.OpenServ(value1)" & Chr(13) & Chr(10) & _
"        client.Close()" & Chr(13) & Chr(10) & _
"        MessageBox.Show(" & Chr(34) & "Открыто в основном приложении" & Chr(34) & ")" & Chr(13) & Chr(10) & _
"    End Sub" & Chr(13) & Chr(10) & _
"End Class"

    End Sub
    Private Shared Sub cr_app()
        Dim objCodeCompiler As System.CodeDom.Compiler.CodeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("VB")
        Dim objCompilerParameters As New System.CodeDom.Compiler.CompilerParameters()
        objCompilerParameters.ReferencedAssemblies.Add("mscorlib.dll")
        objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll")
        objCompilerParameters.ReferencedAssemblies.Add("System.dll")
        objCompilerParameters.ReferencedAssemblies.Add("C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.ServiceModel.dll")
        objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll")
        objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll")
        objCompilerParameters.ReferencedAssemblies.Add("System.Drawing.dll")
        objCompilerParameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
        objCompilerParameters.CompilerOptions = "/target:winexe"
        objCompilerParameters.GenerateExecutable = True
        objCompilerParameters.GenerateInMemory = True
        objCompilerParameters.IncludeDebugInformation = False
        Dim objCompileResults As System.CodeDom.Compiler.CompilerResults = objCodeCompiler.CompileAssemblyFromSource(objCompilerParameters, str_tb)
        If objCompileResults.Errors.HasErrors Then
            MessageBox.Show(String.Format("Error: Line>{0}, {1} # {2}", objCompileResults.Errors(0).Line, objCompileResults.Errors(0).ErrorText, objCompileResults.Errors(0).ErrorNumber))
            Return
        End If
        Dim objAssembly As System.Reflection.Assembly = objCompileResults.CompiledAssembly
        Dim objTheClass As Object = objAssembly.CreateInstance("MainClass")
        If objTheClass Is Nothing Then
            MsgBox("Can't load class...")
            Exit Sub
        End If
        Try
            objTheClass.GetType.InvokeMember("Main", System.Reflection.BindingFlags.InvokeMethod, _
            Nothing, objTheClass, Nothing)
        Catch ex As Exception
            MsgBox("Error:" & ex.Message)
        End Try
    End Sub


Выдает "таймаут прошел, а ответа нет"!!! ради интереса попробовал сделать и клиент и сервис в одном проекте - тоже не работает, но ошибку пишет другую!!!
если найдутся желающие реально помочь, но спецы на C# - перепишу пример, мне-то не важно, просто рабочий проект на VB
Возможно для этого нужно использовать, не NetPipeBinding? Задача вобщем-то сводиться "как из скомпилированной сборки вызвать процедуру основного (скомпилировавшего ее) приложения"
...
Рейтинг: 0 / 0
NetNamedPipeBinding в одном проекте
    #37570144
gdengam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я надеюсь понятно, что в сборке полная копия приложения-клиента из предыдущего рабочего примера)))
то есть весь вопрос, а можно ли сделать обмен через службу внутри одного приложения, но в сборке... и может стоит просто использовать не NetPipeBinding
...
Рейтинг: 0 / 0
NetNamedPipeBinding в одном проекте
    #37581300
gdengam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело было в потоках))) если выполнить сборку в другом потоке, то все работает
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / NetNamedPipeBinding в одном проекте
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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