.NET Remoting 配置文件方式

前言

第一次接触remoting,尝试了使用代码进行注册通道、注册远程对象、获取远程对象之后,尝试用配置文件方式完成相同的操作,万万没想到,一直不成功,而原因竟然是……
气死我了,上才(dai)艺(ma)

远程对象

创建了一个空白解决方案,再新建了三个项目,这里是一个类库,用于存放远程对象
创建了一个名为RemoteObj的类,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RemoteObject
{
    public class RemoteObj:MarshalByRefObject
    {
        public RemoteObj()
        {
            Console.WriteLine("RemoteObj构造函数被调用");
        }

        public string Hello()
        {
            Console.WriteLine("Hello Server!");
            return "Hello,Client!";
        }
    }
}

服务端

这里是一个控制台应用程序,再在里面新建一个应用程序配置文件,也就是App.config
记得把远程对象这个类库添加引用到服务端哦!
Program.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting;

namespace Server
{
    class Program
    {
        static void Main(string[] args)
        {
            RemotingConfiguration.Configure("Server.exe.config", false);
            Console.ReadKey();
        }
    }
}

App.config配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application>
      <service>
        <wellknown mode="SingleCall" type="RemoteObject.RemoteObj,RemoteObject" objectUri="RemoteObj"/>
      </service>
      <channels>
        <channel ref="tcp" port="8090"/>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

客户端

这里也是一个控制台应用程序,再在里面新建一个应用程序配置文件,也就是App.config
记得也要把远程对象这个类库添加引用到服务端哦!
Program.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteObject;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                RemotingConfiguration.Configure("Client.exe.config", false);
                RemoteObj obj = new RemoteObj();
                Console.WriteLine(obj.Hello());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
}

App.config配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.runtime.remoting>
    <application >
      <client>
        <wellknown type="RemoteObject.RemoteObj,RemoteObject" url="tcp://localhost:8090/RemoteObj"/>
      </client>
    </application>
  </system.runtime.remoting>
</configuration>

运行结果

在这里插入图片描述

一直不成功的原因

主要是因为配置文件中的wellknown,所谓的知名对象

<wellknown type=“RemoteObject.RemoteObj,RemoteObject” url=“tcp://localhost:8090/RemoteObj”/>

在wellknown中,type的组成是 命名空间.实现类名称,程序集名称,而url中最后的名称也是实现类名称
多唠叨一下……
命名空间,就是远程对象里的那个 namespace后面,就是命名空间,本文中就是RemoteObject。
实现类名称,就是命名空间里的class后面,就是实现类名称,本文中就是RemoteObj。
程序集名称,就是生成dll后的那个名称,再啥都没改的情况下,基本就是跟命名空间、项目名称都是一样的,本文中就是RemoteObject。

另外,贴一下学习来源~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值