• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#windowsservice承載遠程對象

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

參考文章:https://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/BuildSucApp/BSAAsecmodsecmod29.mspx?mfr=true
 
1.首先寫接口定義遠程對象需要操作的方法,這個接口定義在單獨的類庫,供windowsservice引用和遠程客戶端引用.
public interface IRemoteObjectMethod
{
   void DoSth();
}

2.然後建立windows service 工程,添加實現遠程對象接口的類.
public class RemoteObject : MarshalByRefObject, IRemoteObjectMethod
{
    public RemoteObject()
   {}
 // 添加方法的具體實現
}

3.添加註冊遠程對象配置節到app.config.
如下:
<system.runtime.remoting>
 <application name="ServerToClientService">
  <service>
   <wellknow type="DownLoaderService.MarshalDownSyncObject, DownLoaderService" objectUri="DownSyncObject" mode="singlecall"/>
  </service> 
  <channels>
   <channel ref="tcp" port="6767">
    <serverProviders>
     <formatter ref="binary"/>  
    </serverProviders>  
   </channel>
  </channels>     
 </application> 
</system.runtime.remoting>

4.在windows service的開始方法裏面添加註冊遠程對象的代碼.
protected override void OnStart(string[] args)
  {
      RemotingConfiguration.Configure   (AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
}

5.安裝windows服務.這個就不必詳細寫了.

至此,windows service的部分已經完成,接下來的都是在遠程客戶機上的操作.

6.添加獲取遠程對象的類和配置文件.
 public class RemoteObjectFactory
 {     
      // 承載遠程對象的服務名稱
      private static string svc_Name = ConfigurationSettings.AppSettings["ServiceName"];
      // 遠程服務所在的ip地址
      private static string svc_ipAddress = ConfigurationSettings.AppSettings["ServiceIP"];
      // 遠程對象註冊時的端口號
      private static int svc_port = int.Parse(ConfigurationSettings.AppSettings["ServicePort"]);
      // 遠程對象的標識
      private static string svc_objectUri = ConfigurationSettings.AppSettings["ObjectUri"];
      // 遠程連接通道的類型
      private static string channelType = ConfigurationSettings.AppSettings["ChannelType"];

      
      public static IRemoteObjectMethod GetServerSyncObject()
      {
         string url = channelType + "://"  + svc_ipAddress + ":" + svc_port.ToString() + "/"  + svc_Name + "/"   + svc_objectUri;
         IRemoteObjectMethod obj = (IRemoteObjectMethod)Activator.GetObject   (typeof (IRemoteObjectMethod), url);
         if (obj == null)
         {   
                throw new Exception("Service not exists or Remoteobject not exists!");
         }
         return obj;
     }
 }
創建遠程對象獲取的方法,並在app.config添加相應的配置項.

7.遠程客戶端調用
IRemoteObjectMethod remoteObject = RemoteObjectFactory.GetServerSyncObject();
remoteObject.DoSth();

這樣似乎可以比較輕鬆的實現遠程方法的調用:)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Unity3D之通过C#使用AdvancedCSharpMessenger发布时间:2022-07-13
下一篇:
C语言形参和实参,传值调用和引用调用的区别发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap