[VB.NET]remoting客户和服务器共享成员或接口的示例

前端之家收集整理的这篇文章主要介绍了[VB.NET]remoting客户和服务器共享成员或接口的示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. 在.NET下的remoting使用里面,很多的书上都是使用了客户和服务器端都是使用一样共享成员或接口的示例来做说明。而且在实际的使用中有不小的问题。
  2. [共享代码]
  3. share.vb
  4. @H_404_30@ImportsSystem.windows.forms
  5. @H_404_30@Public@H_404_30@InterfaceIconnect'客户端和服务器端同时共享使用一个接口
  6. @H_404_30@FunctiongetName()@H_404_30@As@H_404_30@String
  7. @H_404_30@End@H_404_30@Interface
  8. @H_404_30@Public@H_404_30@Classapp
  9. @H_404_30@Public@H_404_30@Shared@H_404_30@ReadOnly@H_404_30@PropertyappPath()@H_404_30@As@H_404_30@String'提供一些应用程序常用路径将会在服务安装的Get'过程中被使用
  10. @H_404_30@ReturnApplication.StartupPath
  11. @H_404_30@End@H_404_30@Get
  12. @H_404_30@End@H_404_30@Property
  13. @H_404_30@Public@H_404_30@Shared@H_404_30@ReadOnly@H_404_30@PropertywinPath()@H_404_30@As@H_404_30@String
  14. @H_404_30@Get
  15. @H_404_30@ReturnSystem.Environment.GetEnvironmentVariable("windir")
  16. @H_404_30@End@H_404_30@Get
  17. @H_404_30@End@H_404_30@Property
  18. @H_404_30@End@H_404_30@Class
  19. [服务器端]'共俩个文件,第一个是服务文件,第二个是服务调用功能实现文件
  20. service1.vb'引用了System.Runtime.Remoting.dll文件,这是服务
  21. @H_404_30@ImportsSystem.ServiceProcess
  22. @H_404_30@ImportsSystem.Runtime
  23. @H_404_30@ImportsSystem.Runtime.Remoting
  24. @H_404_30@ImportsSystem.Runtime.Remoting.Channels
  25. @H_404_30@Public@H_404_30@ClassService1
  26. @H_404_30@InheritsSystem.ServiceProcess.ServiceBase
  27. #Region"组件设计器生成代码"
  28. @H_404_30@Public@H_404_30@Sub@H_404_30@New()
  29. @H_404_30@MyBase.@H_404_30@New()
  30. '该调用是组件设计器所必需的。
  31. InitializeComponent()
  32. '在InitializeComponent()调用之后添加任何初始化
  33. @H_404_30@End@H_404_30@Sub
  34. 'UserService重写dispose以清理组件列表。
  35. @H_404_30@Protected@H_404_30@Overloads@H_404_30@Overrides@H_404_30@SubDispose(@H_404_30@ByValdisposing@H_404_30@As@H_404_30@Boolean)
  36. @H_404_30@Ifdisposing@H_404_30@Then
  37. @H_404_30@If@H_404_30@Not(components@H_404_30@Is@H_404_30@Nothing)@H_404_30@Then
  38. components.Dispose()
  39. @H_404_30@End@H_404_30@If
  40. @H_404_30@End@H_404_30@If
  41. @H_404_30@MyBase.Dispose(disposing)
  42. @H_404_30@End@H_404_30@Sub
  43. '进程的主入口点
  44. <MTAThread()>_
  45. @H_404_30@Shared@H_404_30@SubMain()
  46. @H_404_30@DimServicesToRun()@H_404_30@AsSystem.ServiceProcess.ServiceBase
  47. '在同一进程中可以运行不止一个NT服务。若要将
  48. '另一个服务添加到此进程,请更改下行以
  49. '创建另一个服务对象。例如,
  50. '
  51. 'ServicesToRun=NewSystem.ServiceProcess.ServiceBase(){NewService1,NewMySecondUserService}
  52. '
  53. ServicesToRun=@H_404_30@NewSystem.ServiceProcess.ServiceBase(){@H_404_30@NewService1}
  54. System.ServiceProcess.ServiceBase.Run(ServicesToRun)
  55. @H_404_30@End@H_404_30@Sub
  56. '组件设计器所必需的
  57. @H_404_30@Privatecomponents@H_404_30@AsSystem.ComponentModel.IContainer
  58. '注意:以下过程是组件设计器所必需的
  59. '可以使用组件设计器修改此过程。
  60. '不要使用代码编辑器修改它。
  61. <System.Diagnostics.DebuggerStepThrough()>@H_404_30@Private@H_404_30@SubInitializeComponent()
  62. '
  63. 'Service1
  64. '
  65. @H_404_30@Me.ServiceName="Server"
  66. @H_404_30@End@H_404_30@Sub
  67. #EndRegion
  68. @H_404_30@Protected@H_404_30@Overrides@H_404_30@SubOnStart(@H_404_30@ByValargs()@H_404_30@As@H_404_30@String)
  69. '在此处添加启动服务的代码。此方法应设置具体的操作
  70. '以便服务可以执行它的工作。
  71. @H_404_30@Try
  72. @H_404_30@Dimch@H_404_30@As@H_404_30@NewTcp.TcpChannel(8212)'监听端口是在8212,你可以修改该端口
  73. ChannelServices.RegisterChannel(ch)'注册端口
  74. Remoting.RemotingConfiguration.RegisterWellKnownServiceType(Type.@H_404_30@GetType("serviceShare.serviceShare,serviceShare",@H_404_30@True,@H_404_30@True),"server",WellKnownObjectMode.Singleton)
  75. 'Type.GetType中的String是需要引用的服务所在的位置,"serviceShare.serviceShare,serviceShare"中前面俩个serviceShare是指服务所在的程序集中的要做服务的类。逗号后面的serviceShare是指该程序集位于的文件。后面的第三个参数:True就是表示要搜索文件时不区分大小写。"server"表示服务的名称
  76. @H_404_30@Catchex@H_404_30@AsException
  77. EventLog.WriteEntry("日志"&ex.Message)
  78. @H_404_30@End@H_404_30@Try
  79. @H_404_30@End@H_404_30@Sub
  80. @H_404_30@Protected@H_404_30@Overrides@H_404_30@SubOnStop()
  81. '在此处添加代码以执行停止服务所需的关闭操作。
  82. @H_404_30@Try
  83. @H_404_30@Dimch@H_404_30@As@H_404_30@NewTcp.TcpChannel(8212)
  84. ChannelServices.UnregisterChannel(ch)
  85. @H_404_30@Catchex@H_404_30@AsException
  86. EventLog.WriteEntry("日志"&ex.Message)
  87. @H_404_30@End@H_404_30@Try
  88. @H_404_30@End@H_404_30@Sub
  89. @H_404_30@End@H_404_30@Class
  90. serviceShare.vb'该文件为接口的实现文件,可以修改这个文件获得自己需要的服务,可以在这里引用 '其他DLL中的方法
  91. @H_404_30@Public@H_404_30@ClassserviceShare
  92. @H_404_30@InheritsMarshalByRefObject
  93. @H_404_30@Implementsshare.Iconnect
  94. @H_404_30@Privatesharedi@H_404_30@AsInt32=0
  95. @H_404_30@Public@H_404_30@FunctiongetName()@H_404_30@As@H_404_30@String@H_404_30@Implementsshare.Iconnect.getName
  96. i=i+1
  97. @H_404_30@Return"fromServer"&i
  98. @H_404_30@End@H_404_30@Function
  99. @H_404_30@End@H_404_30@Class
  100. [客户端]
  101. form1.vb
  102. @H_404_30@ImportsSystem
  103. @H_404_30@ImportsSystem.Runtime
  104. @H_404_30@ImportsSystem.Runtime.Remoting
  105. @H_404_30@ImportsSystem.Runtime.Remoting.Channels
  106. @H_404_30@Public@H_404_30@ClassForm1
  107. @H_404_30@InheritsSystem.Windows.Forms.Form
  108. @H_404_30@Privatech@H_404_30@AsTcp.TcpChannel
  109. #Region"Windows窗体设计器生成代码"
  110. @H_404_30@Public@H_404_30@Sub@H_404_30@New()
  111. @H_404_30@MyBase.@H_404_30@New()
  112. '该调用是Windows窗体设计器所必需的。
  113. InitializeComponent()
  114. '在InitializeComponent()调用之后添加任何初始化
  115. @H_404_30@End@H_404_30@Sub
  116. '窗体重写dispose以清理组件列表。
  117. @H_404_30@Protected@H_404_30@Overloads@H_404_30@Overrides@H_404_30@SubDispose(@H_404_30@ByValdisposing@H_404_30@As@H_404_30@Boolean)
  118. @H_404_30@Ifdisposing@H_404_30@Then
  119. @H_404_30@If@H_404_30@Not(components@H_404_30@Is@H_404_30@Nothing)@H_404_30@Then
  120. components.Dispose()
  121. @H_404_30@End@H_404_30@If
  122. @H_404_30@End@H_404_30@If
  123. @H_404_30@MyBase.Dispose(disposing)
  124. @H_404_30@End@H_404_30@Sub
  125. 'Windows窗体设计器所必需的
  126. @H_404_30@Privatecomponents@H_404_30@AsSystem.ComponentModel.IContainer
  127. '注意:以下过程是Windows窗体设计器所必需的
  128. '可以使用Windows窗体设计器修改此过程。
  129. '不要使用代码编辑器修改它。
  130. @H_404_30@Friend@H_404_30@WithEventsLabel1@H_404_30@AsSystem.Windows.Forms.Label
  131. @H_404_30@Friend@H_404_30@WithEventsButton1@H_404_30@AsSystem.Windows.Forms.Button
  132. <System.Diagnostics.DebuggerStepThrough()>@H_404_30@Private@H_404_30@SubInitializeComponent()
  133. @H_404_30@Me.Label1=@H_404_30@NewSystem.Windows.Forms.Label
  134. @H_404_30@Me.Button1=@H_404_30@NewSystem.Windows.Forms.Button
  135. @H_404_30@Me.SuspendLayout()
  136. '
  137. 'Label1
  138. '
  139. @H_404_30@Me.Label1.Location=@H_404_30@NewSystem.Drawing.Point(80,50)
  140. @H_404_30@Me.Label1.Name="Label1"
  141. @H_404_30@Me.Label1.Size=@H_404_30@NewSystem.Drawing.Size(125,25)
  142. @H_404_30@Me.Label1.TabIndex=0
  143. @H_404_30@Me.Label1.Text="Label1"
  144. '
  145. 'Button1
  146. '
  147. @H_404_30@Me.Button1.Location=@H_404_30@NewSystem.Drawing.Point(105,195)
  148. @H_404_30@Me.Button1.Name="Button1"
  149. @H_404_30@Me.Button1.Size=@H_404_30@NewSystem.Drawing.Size(75,25)
  150. @H_404_30@Me.Button1.TabIndex=1
  151. @H_404_30@Me.Button1.Text="Button1"
  152. '
  153. 'Form1
  154. '
  155. @H_404_30@Me.AutoScaleBaseSize=@H_404_30@NewSystem.Drawing.Size(6,14)
  156. @H_404_30@Me.ClientSize=@H_404_30@NewSystem.Drawing.Size(292,273)
  157. @H_404_30@Me.Controls.Add(@H_404_30@Me.Button1)
  158. @H_404_30@Me.Controls.Add(@H_404_30@Me.Label1)
  159. @H_404_30@Me.Name="Form1"
  160. @H_404_30@Me.Text="Form1"
  161. @H_404_30@Me.ResumeLayout(@H_404_30@False)
  162. @H_404_30@End@H_404_30@Sub
  163. #EndRegion
  164. @H_404_30@Private@H_404_30@SubButton1_Click(@H_404_30@ByValsender@H_404_30@AsSystem.@H_404_30@Object,@H_404_30@ByVale@H_404_30@AsSystem.EventArgs)@H_404_30@HandlesButton1.Click
  165. @H_404_30@DimserverName@H_404_30@As@H_404_30@String
  166. @H_404_30@Dimaa@H_404_30@Asshare.Iconnect
  167. serverName="tcp://127.0.0.1:8212/server"
  168. aa=@H_404_30@CType(Activator.GetObject(Type.@H_404_30@GetType("share.Iconnect,share",serverName),share.Iconnect)
  169. '注意这个地方
  170. Label1.Text=aa.getName()
  171. @H_404_30@End@H_404_30@Sub
  172. @H_404_30@Private@H_404_30@SubForm1_Load(@H_404_30@ByValsender@H_404_30@AsSystem.@H_404_30@Object,@H_404_30@ByVale@H_404_30@AsSystem.EventArgs)@H_404_30@Handles@H_404_30@MyBase.Load
  173. ch=@H_404_30@NewTcp.TcpChannel'客户端可以不注册端口
  174. ChannelServices.RegisterChannel(ch)
  175. @H_404_30@End@H_404_30@Sub
  176. @H_404_30@End@H_404_30@Class
  177. [服务安装]
  178. Strart.vb'服务安装
  179. @H_404_30@ModuleStrart
  180. @H_404_30@SubMain(@H_404_30@ByValarg()@H_404_30@As@H_404_30@String)
  181. @H_404_30@On@H_404_30@Error@H_404_30@Resume@H_404_30@Next
  182. #IfDEBUGThen
  183. @H_404_30@IfIO.File.Exists("setup.bat")@H_404_30@Then'批处理附后面
  184. Shell("setup.bat",@H_404_30@True)
  185. @H_404_30@End@H_404_30@If
  186. #EndIf
  187. @H_404_30@If(IO.File.Exists("testService.exe"))@H_404_30@Then
  188. Shell(share.app.winPath&"/Microsoft.NET/Framework/v1.1.4322/InstallUtil.exe"_
  189. &share.app.appPath&"/testService.exe/LogFile",AppWinStyle.Hide,@H_404_30@True)
  190. @H_404_30@DimSc2@H_404_30@As@H_404_30@NewSystem.ServiceProcess.ServiceController("server")
  191. @H_404_30@IfSc2.Status=ServiceProcess.ServiceControllerStatus.Stopped@H_404_30@Then
  192. Sc2.Start()
  193. @H_404_30@End@H_404_30@If
  194. @H_404_30@End@H_404_30@If
  195. @H_404_30@End@H_404_30@Sub
  196. @H_404_30@End@H_404_30@Module
  197. [服务卸载]
  198. UnSetup.vb
  199. @H_404_30@Modulestrart
  200. @H_404_30@SubMain()
  201. @H_404_30@On@H_404_30@Error@H_404_30@Resume@H_404_30@Next
  202. @H_404_30@If(IO.File.Exists("testservice.exe"))@H_404_30@Then
  203. @H_404_30@DimSc1@H_404_30@As@H_404_30@NewSystem.ServiceProcess.ServiceController("server")
  204. @H_404_30@IfSc1.Status=ServiceProcess.ServiceControllerStatus.Running@H_404_30@Then
  205. Sc1.@H_404_30@Stop()
  206. @H_404_30@End@H_404_30@If
  207. Shell(share.app.winPath&"/Microsoft.NET/Framework/v1.1.4322/InstallUtil.exe/u"_
  208. &share.app.appPath&"/testservice.exe/LogFile",@H_404_30@True)
  209. @H_404_30@End@H_404_30@If
  210. @H_404_30@End@H_404_30@Sub
  211. @H_404_30@End@H_404_30@Module
  212. [批处理]
  213. copy../../serviceShare/bin/serviceShare.dll./serviceShare.dll
  214. copy../../test/bin/test.exe./test.exe
  215. copy../../shared/bin/share.dll./share.dll
  216. copy../../UnSetup/bin/UnSetup.exe./UnSetup.exe
  217. copy../../testService/bin/testService.exe./testService.exe
  218. 这样能方便的扩展自己的功能,因为很多书上的代码,使用都是抄微软的,如果程序是分开独立制作,只公布接口的话,安微软的做法就很难成功。

猜你在找的VB相关文章