huang233229920 2022-03-20 20:55 采纳率: 0%
浏览 146
已结题

关于c# remonting的问题

服务端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting;
using System.Collections;
using System.Runtime.Serialization.Formatters;
using Microsoft.Office.Interop.Excel;

[Serializable]
public class DemoClass : MarshalByRefObject
{
    public void Doit()
    {
        Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
        excelapp.Visible = true;
        Workbook book1 = excelapp.Workbooks.Add(Type.Missing);
        Worksheet sheet1 = (Worksheet)book1.Sheets[1];
        Range range = sheet1.get_Range("A1", Type.Missing);
        range.Value2 = "Hello World!"; 
    }
}
class Program
{
    static void Main(string[] args)
    {
        BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
        provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
        IDictionary props = new Hashtable();
        props["port"] = 1234;
        ChannelServices.RegisterChannel(new TcpChannel(props, null, provider), false);
        RemotingConfiguration.RegisterWellKnownServiceType(typeof(DemoClass), "DemoClass", WellKnownObjectMode.Singleton);
        Console.WriteLine("服务已启动...");
        Console.ReadKey();
    }
}

客户端代码:

using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting;
using Microsoft.Office.Interop.Excel;

[Serializable]
public class DemoClass : MarshalByRefObject
{
    public void Doit()
    {
    }
}
class Program
{
    static void Main(string[] args)
    {
        DemoClass obj = (DemoClass)Activator.GetObject(typeof(DemoClass), "tcp://127.0.0.1:1234/DemoClass");
        obj.Doit();
        Console.ReadKey();
    }
}

代码在本机测试是没问题的,两者都是控制台应用程序,可以实现功能;但放在局域网中测试问题就来了 ,先执行服务端所在电脑,客户端所在电脑运行之后居然在服务端电脑上打开了Excel,这个不是我要的效果撒。我需要实现客户端远程调用服务端的方法,在客户端电脑上打开Excel

  • 写回答

7条回答 默认 最新

  • soar3033 2022-03-20 21:16
    关注
    获得8.00元问题酬金

    你想让客户端打开excel 那不是应该再客户端里建立一个domoclass的实例化对象来调用doit吗
    你直接remonting服务端的对象,自然是在服务端进行操作

    using System.Text;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Runtime.Remoting;
    using Microsoft.Office.Interop.Excel;
     
    [Serializable]
    public class DemoClass : MarshalByRefObject
    {
        public void Doit()
        {
            Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application();
            excelapp.Visible = true;
            Workbook book1 = excelapp.Workbooks.Add(Type.Missing);
            Worksheet sheet1 = (Worksheet)book1.Sheets[1];
            Range range = sheet1.get_Range("A1", Type.Missing);
            range.Value2 = "Hello World!"; 
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DemoClass obj = (DemoClass)Activator.GetObject(typeof(DemoClass), "tcp://127.0.0.1:1234/DemoClass");
            DemoClass obj2=new DemoClass();
            obj2.doit();
            Console.ReadKey();
        }
    }
    
    

    这样本就是本地打开了吗

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 可否使用carsim-simulink进行四轮独立转向汽车的联合仿真,实现四轮独立转向汽车原地旋转、斜向形式、横移等动作,如果可以的话在carsim中如何进行相应设置
  • ¥15 Caché 2016 在Java环境通过jdbc 执行sql报Parameter list mismatch错误,但是同样的sql使用连接工具可以查询出数据
  • ¥15 疾病的获得与年龄是否有关
  • ¥15 关于浏览器控制台js报错问题-swiper.js相关
  • ¥15 opencv.js内存,CPU飙升
  • ¥15 植物重测序snp数据Treemix分析出现问题!
  • ¥15 怎么让当前页面只能有一人在编辑
  • ¥15 python程序长时间运行卡死,付费求解决方案
  • ¥20 VM打开不了ubuntu虚拟机,如何解决?
  • ¥15 java请求一个返回流式数据的接口,如何将流式数据直接返回前端