Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果可以';t添加[可序列化]_C#_.net_Wcf_Com_.net Remoting - Fatal编程技术网

C# 如果可以';t添加[可序列化]

C# 如果可以';t添加[可序列化],c#,.net,wcf,com,.net-remoting,C#,.net,Wcf,Com,.net Remoting,我使用需要启动的PC外部硬件(耗时)。我被要求通过编写一些软件来加速这个过程,这些软件将引导硬件,然后允许客户端获得对硬件的引用。目前,他们必须在每次重新启动软件时重新启动硬件 我们使用的所有硬件都是第三方和c#编写的,因此我没有能力修改硬件类 由于这一切都需要在同一台PC上运行,因此Windows服务似乎可以用来托管一些软件,这些软件将实例化硬件类,引导硬件,然后根据请求返回引用 尝试1是托管在Windows服务中的WCF客户端。这一点在我意识到WCF是一个基于消息的系统之前一直有效,它不允许

我使用需要启动的PC外部硬件(耗时)。我被要求通过编写一些软件来加速这个过程,这些软件将引导硬件,然后允许客户端获得对硬件的引用。目前,他们必须在每次重新启动软件时重新启动硬件

我们使用的所有硬件都是第三方和c#编写的,因此我没有能力修改硬件类

由于这一切都需要在同一台PC上运行,因此Windows服务似乎可以用来托管一些软件,这些软件将实例化硬件类,引导硬件,然后根据请求返回引用

尝试1是托管在Windows服务中的WCF客户端。这一点在我意识到WCF是一个基于消息的系统之前一直有效,它不允许访问返回对象的方法…只允许访问数据。我最终意识到,我正试图让WCF做一些它不打算做的事情。我也无法将DataContract属性添加到第三方dll类

尝试2正在使用Windows服务中托管的.NET远程处理。在我意识到我无法将[Serializable]属性添加到第三方类之前,这种方法最初是有效的。我可以继承一个类并添加MarshallByRefObject,但这只允许我远程调用该对象,这对于我们来说太慢了

我曾尝试过使用共享程序集强制WCF工作,也尝试过在运行时添加属性,但这两种想法都行不通

我的下一次尝试是使用COM,但我认为这真的不应该这么难……我想我会咨询SO社区,看看我是否遗漏了什么

这里要澄清的是我想在服务中实例化的第三方类的一个示例,并将副本返回给客户端

    public class afDigitizer : IDigitizerHandle, IDisposable
    {
    public afDigitizerCalibrate Calibrate;
    public afDigitizerCapture Capture;
    public afDigitizerEventOnError EventOnError;
    public afDigitizerEventOnWarning EventOnWarning;
    public afDigitizerListMode ListMode;
    public afDigitizerLO LO;
    public afDigitizerLVDS LVDS;
    public afDigitizerModulation Modulation;
    public afDigitizerRF RF;
    public afDigitizerTimer Timer;
    public afDigitizerTrigger Trigger;

    public afDigitizer();
    public afDigitizer(string installDir);

    ~afDigitizer();

    public int BootInstrument(string LoResource, string RfResource, int LoIsPlugin);}


为什么软件不能获得自己的参考?“参考资料”中到底是什么?一些.NET对象?那个引用对象看起来像什么?仅仅因为它没有被标记为
[Serializable]
,并不意味着它不能被序列化…“通过编写一些软件来加速这个过程,这些软件将引导硬件,然后允许客户端获得对硬件的引用。”你能重新表述一下吗?我不明白这是什么意思。什么样的硬件参考?对象引用?对于硬件?我添加了一些示例代码,希望能够澄清@Ron Beyer的评论。我提到的硬件参考只是一个与硬件对话的类的实例。请参见我添加的示例。在开发每次处理类实例时都使用该类实例的软件期间,需要重新启动硬件,这非常耗时。其想法是让服务器(windows服务)实例化该类并引导硬件,然后将该类的副本(我想我将其称为引用)返回给客户端软件。这对于我完全控制的类很好,但对于我的示例中的第三方类则不行。
        // and the code to instantiate the object and boot it.
        private afDigitizer vsa = new afDigitizer();


        errorCode = vsa.BootInstrument(this.LO, this.RF,-1);
        // Now i want to return the vsa object.