diff --git a/ComputingServices/ComputingServices.vbproj b/ComputingServices/ComputingServices.vbproj
index 5da91ba..ca77106 100644
--- a/ComputingServices/ComputingServices.vbproj
+++ b/ComputingServices/ComputingServices.vbproj
@@ -231,6 +231,7 @@
True
+
diff --git a/ComputingServices/Taskhost.d/Extensions.vb b/ComputingServices/Taskhost.d/Extensions.vb
index 5fb7218..c7ff7c5 100644
--- a/ComputingServices/Taskhost.d/Extensions.vb
+++ b/ComputingServices/Taskhost.d/Extensions.vb
@@ -1,48 +1,49 @@
#Region "Microsoft.VisualBasic::4c6028116bed86fe45bf6a4e74f0af36, ComputingServices\Taskhost.d\Extensions.vb"
- ' Author:
- '
- ' asuka (amethyst.asuka@gcmodeller.org)
- ' xie (genetics@smrucc.org)
- ' xieguigang (xie.guigang@live.com)
- '
- ' Copyright (c) 2018 GPL3 Licensed
- '
- '
- ' GNU GENERAL PUBLIC LICENSE (GPL3)
- '
- '
- ' This program is free software: you can redistribute it and/or modify
- ' it under the terms of the GNU General Public License as published by
- ' the Free Software Foundation, either version 3 of the License, or
- ' (at your option) any later version.
- '
- ' This program is distributed in the hope that it will be useful,
- ' but WITHOUT ANY WARRANTY; without even the implied warranty of
- ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ' GNU General Public License for more details.
- '
- ' You should have received a copy of the GNU General Public License
- ' along with this program. If not, see .
-
-
-
- ' /********************************************************************************/
-
- ' Summaries:
-
- ' Module Extensions
- '
- ' Properties: EnvironmentLocal, IPAddress, PublicShared
- '
- ' Constructor: (+1 Overloads) Sub New
- ' Function: [AddressOf], AddressEquals, (+2 Overloads) Invoke
- '
- '
- ' /********************************************************************************/
+' Author:
+'
+' asuka (amethyst.asuka@gcmodeller.org)
+' xie (genetics@smrucc.org)
+' xieguigang (xie.guigang@live.com)
+'
+' Copyright (c) 2018 GPL3 Licensed
+'
+'
+' GNU GENERAL PUBLIC LICENSE (GPL3)
+'
+'
+' This program is free software: you can redistribute it and/or modify
+' it under the terms of the GNU General Public License as published by
+' the Free Software Foundation, either version 3 of the License, or
+' (at your option) any later version.
+'
+' This program is distributed in the hope that it will be useful,
+' but WITHOUT ANY WARRANTY; without even the implied warranty of
+' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' GNU General Public License for more details.
+'
+' You should have received a copy of the GNU General Public License
+' along with this program. If not, see .
+
+
+
+' /********************************************************************************/
+
+' Summaries:
+
+' Module Extensions
+'
+' Properties: EnvironmentLocal, IPAddress, PublicShared
+'
+' Constructor: (+1 Overloads) Sub New
+' Function: [AddressOf], AddressEquals, (+2 Overloads) Invoke
+'
+'
+' /********************************************************************************/
#End Region
+Imports System.Reflection
Imports System.Runtime.CompilerServices
Imports Microsoft.VisualBasic.Net.Tcp
@@ -85,9 +86,7 @@ Namespace TaskHost
#End If
End Sub
- Public ReadOnly Property PublicShared As System.Reflection.BindingFlags =
- System.Reflection.BindingFlags.Public Or
- System.Reflection.BindingFlags.Static
+ Public ReadOnly Property PublicShared As BindingFlags = BindingFlags.Public Or BindingFlags.Static
'''
'''
@@ -107,7 +106,7 @@ Namespace TaskHost
Public Function Invoke(info As InvokeInfo, host As TaskRemote) As Object
If host Is Nothing Then
- Return TaskInvoke.TryInvoke(info)
+ Return RemoteCall.doCall(info)
Else
Dim rtvl = host.Invoke(info)
Dim entry = info.GetMethod
diff --git a/ComputingServices/Taskhost.d/Invoke/RemoteCall.vb b/ComputingServices/Taskhost.d/Invoke/RemoteCall.vb
new file mode 100644
index 0000000..d330af0
--- /dev/null
+++ b/ComputingServices/Taskhost.d/Invoke/RemoteCall.vb
@@ -0,0 +1,46 @@
+Imports System.Reflection
+Imports System.Runtime.CompilerServices
+Imports Microsoft.VisualBasic.Serialization.JSON
+Imports sciBASIC.ComputingServices.TaskHost
+
+Module RemoteCall
+
+ '''
+ ''' Invoke the function on the remote server.(远程服务器上面通过这个方法执行函数调用)
+ '''
+ '''
+ '''
+ '''
+
+ Public Function Invoke(params As InvokeInfo) As Rtvl
+ Dim rtvl As Rtvl
+
+ Try
+ Dim value As Object = doCall(params)
+
+ rtvl = New Rtvl(value)
+ Catch ex As Exception
+ ex = New Exception(params.GetJson, ex)
+ rtvl = New Rtvl(ex)
+ End Try
+
+ Return rtvl
+ End Function
+
+ '''
+ ''' A common function of invoke the method on the remote machine
+ '''
+ ''' 远程主机上面的函数指针
+ '''
+ '''
+
+ Public Function doCall(params As InvokeInfo) As Object
+ Dim func As MethodInfo = params.GetMethod
+ Dim paramsValue As Object() = params.parameters _
+ .Select(Function(arg) arg.GetValue) _
+ .ToArray
+ Dim value As Object = func.Invoke(Nothing, paramsValue)
+
+ Return value
+ End Function
+End Module
diff --git a/ComputingServices/Taskhost.d/Invoke/TaskInvoke.vb b/ComputingServices/Taskhost.d/Invoke/TaskInvoke.vb
index 918e4ba..a5f6b88 100644
--- a/ComputingServices/Taskhost.d/Invoke/TaskInvoke.vb
+++ b/ComputingServices/Taskhost.d/Invoke/TaskInvoke.vb
@@ -82,48 +82,10 @@ Namespace TaskHost
Public ReadOnly Property LinqProvider As LinqPool = New LinqPool
- '''
- ''' Invoke the function on the remote server.(远程服务器上面通过这个方法执行函数调用)
- '''
- '''
- '''
- Public Shared Function Invoke(params As InvokeInfo) As Rtvl
- Dim rtvl As Rtvl
-
- Try
- Dim rtvlType As Type = Nothing
- Dim value As Object = __invoke(params, rtvlType)
- rtvl = New Rtvl(value, rtvlType)
- Catch ex As Exception
- ex = New Exception(params.GetJson, ex)
- rtvl = New Rtvl(ex)
- End Try
-
- Return rtvl
- End Function
-
- '''
- ''' A common function of invoke the method on the remote machine
- '''
- ''' 远程主机上面的函数指针
- ''' value's
- '''
- Private Shared Function __invoke(params As InvokeInfo, ByRef value As Type) As Object
- Dim func As MethodInfo = params.GetMethod
- Dim paramsValue As Object() = params.parameters.Select(Function(arg) arg.GetValue).ToArray
- Dim x As Object = func.Invoke(Nothing, paramsValue)
- value = func.ReturnType
- Return x
- End Function
-
- Public Shared Function TryInvoke(info As InvokeInfo) As Object
- Return __invoke(info, Nothing)
- End Function
-
Private Function Invoke(CA As Long, args As RequestStream, remote As System.Net.IPEndPoint) As RequestStream
Dim params As InvokeInfo = JsonContract.LoadJSON(Of InvokeInfo)(args.GetUTF8String)
- Dim value As Rtvl = Invoke(params)
+ Dim value As Rtvl = RemoteCall.Invoke(params)
Return New RequestStream(value.GetJson)
End Function
@@ -144,10 +106,9 @@ Namespace TaskHost
Private Function InvokeLinq(CA As Long, args As RequestStream, remote As System.Net.IPEndPoint) As RequestStream
Dim params As InvokeInfo = JsonContract.LoadJSON(Of InvokeInfo)(args.GetUTF8String) ' 得到远程函数指针信息
- Dim type As Type = Nothing
- Dim value As Object = __invoke(params, type)
+ Dim value As Object = RemoteCall.doCall(params)
Dim source As IEnumerable = DirectCast(value, IEnumerable)
- Dim svr As String = LinqProvider.OpenQuery(source, type).GetJson ' 返回数据源信息
+ Dim svr As String = LinqProvider.OpenQuery(source, value.GetType).GetJson ' 返回数据源信息
Return New RequestStream(svr)
End Function