标签: remoting

.NET Remoting异常

这是关于抛出.NET远程处理异常的时候.如果你看看MSDN,它会提到当远程处理出现问题时会抛出远程异常.如果我的服务器没有运行,我会收到套接字异常,这很好.

我想弄清楚的是:获取远程异常是否表明我的服务器已启动并正在运行?如果是,那将解决问题.如果不是:有没有办法弄清楚远程异常是否源自客户端或服务器端?

更新:

我试图解决的问题是服务器最初关闭,然后客户端向服务器发送一些消息.现在我得到一个套接字异常,说"不能建立连接......"这很好.

有一个线程定期向服务器发送消息以查看服务器是否可用.现在,服务器出现了,在那时,你可以得到很好的响应,或者你可以得到一些异常,很可能它将是一个远程异常.所以,我想要问的是:如果我没有收到消息并且我得到一个远程异常,那么服务器是否有可能启动并运行,我仍然得到这个异常?

我所做的只是在远程对象上调用一个什么都不做并返回的方法.如果没有例外那么我很好.现在,如果有一个远程异常,如果我知道服务器上发生远程处理异常,那么我知道尽管得到了异常,但我已连接到服务器.

.net remoting

5
推荐指数
1
解决办法
7866
查看次数

如何在.NET远程处理期间使用自定义序列化?

我编写了一个自定义序列化例程,它不使用ISerializable或SerialzableAttribute将我的对象保存到文件中.

我也远程调用这些相同的对象,并希望使用相同的序列化技术.但是,我不想实现ISerializable,因为我的序列化方法与我的对象完全分离(我希望它保持这种方式).

有没有一种简单的方法(可能有远程接收器),我可以在其中获取流并向其写入字节,另一方面从中读取字节,跳过.NET中的序列化框架?

.net c# remoting serialization

5
推荐指数
1
解决办法
2813
查看次数

如何确定远程通道是否已注册

在我的ASP.NET应用程序中,我在全局应用程序启动事件中有一行,通过调用RemotingConfiguration.Configure()来配置客户端远程处理通道.

这在第一次运行良好,但是当我的Web应用程序被回收时,应用程序启动事件再次被触发,导致以下远程处理异常:

远程处理配置失败,出现异常'System.Runtime.Remoting.RemotingException:通道'tcp'已经注册.

我想检测通道是否已配置,以便我可以避免得到此异常.

.net c# remoting

5
推荐指数
1
解决办法
1万
查看次数

如何判断其他应用是否已注册IPC Remoting频道?

所以我有一个提供.NET API的应用程序.他们的API库通过.NET远程调用与他们的主应用程序通信.要使用API​​,应用程序必须已启动并运行.

所以,我有一个实例,我需要以编程方式启动应用程序,然后实例化一个API对象,它试图打开一个IPC远程通道到主应用程序.问题是,在我开始这个过程之后,启动和应用程序注册通道之间会有几秒钟的时间.如果我在注册频道之前尝试实例化一个API对象,它就会发出异常.

我对.NET远程处理知之甚少并没有帮助.

如果他们的应用程序已经注册了通信通道,我如何从我的应用程序确定使用他们的API,所以我知道可以实例化他们的API对象?

c# remoting channel

5
推荐指数
1
解决办法
4460
查看次数

处理IPC远程通道的安全性

我试图在将通过远程访问服务的应用程序的不同用户帐户下运行服务.

虽然在同一帐户下一切都很好,但是一旦我使用不同的帐户,我在尝试打开IPC端口时会收到拒绝访问错误.

有什么我缺少的东西,因为我无法从MSDN文档中看到应该做什么.

谢谢

.net c# remoting ipc

5
推荐指数
1
解决办法
2431
查看次数

使用spring在app服务器中实现业务逻辑

是否可以使用pojos而不是EJB或Servlets ???在App Server远程实现业务逻辑.主要思想是应用3层模型,其中客户端可以是Web浏览器和桌面应用程序,并且它们在App Server中共享业务逻辑.

这将是架构

浏览器-----> Web服务器--------> | App Server(业务逻辑通用)| -------> | RDBMS常用|
桌面应用程序(例如Swing) - > | App Server(业务逻辑通用)| -------> | RDBMS通用|

java remoting spring business-logic

5
推荐指数
1
解决办法
1154
查看次数

如何在两个.NET AppDomains之间传递未知类型?

我有一个.NET应用程序,其中单独的AppDomains中的程序集必须共享按值传递的序列化对象.

两个程序集都引用一个共享程序集,该程序集定义服务器类的基类,并定义将在域之间传递的entiy类型的基类:

public abstract class ServerBase : MarshalByRefObject
{
    public abstract EntityBase GetEntity();
}

[Serializable]
public abstract class EntityBase
{
}
Run Code Online (Sandbox Code Playgroud)

服务器程序集定义服务器类和实体类型的具体实现:

public class Server : ServerBase
{
    public override EntityBase GetEntity()
    {
        return new EntityItem();
    }
}

[Serializable]
public class EntityItem : EntityBase
{
}
Run Code Online (Sandbox Code Playgroud)

客户端程序集创建AppDomain托管服务器程序集的位置,并使用服务器类的实例来请求实体类型的具体实例:

class Program
{
    static void Main()
    {
        var domain = AppDomain.CreateDomain("Server");

        var server = (ServerBase)Activator.CreateInstanceFrom(
            domain,
            @"..\..\..\Server\bin\Debug\Server.dll",
            "Server.Server").Unwrap();

        var entity = server.GetEntity();
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种方法失败了,SerializationException因为客户端程序集并不直接了解返回的具体类型.

我已经读过使用二进制序列化时.NET Remoting支持未知类型,但我不确定这是否适用于我的设置或如何配置它.

或者,是否有任何其他方法可以将未知的具体类型从服务器传递到客户端,因为客户端只需要通过其已知的基类接口访问它.

谢谢你的建议, …

.net remoting appdomain

5
推荐指数
1
解决办法
1700
查看次数

.NET Remoting和HttpContext.Current

我们有一个插件系统,其中插件代码在主进程的单独AppDomain上运行,使用.NET远程处理对象进行通信.

一个类类似于HttpContext.Current(也遇到问题)(编辑,实际实现):

public class MyClass
{
    public static MyClass Instance
    {
        get
        {
            if(HttpContext.Current != null)
                return HttpContext.Current.Items["MyClassInstance"];
        }
        set
        {
            if(HttpContext.Current != null)
                HttpContext.Current.Items["MyClassInstance"] = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我们有一个继承MarshalByRefObject的通信对象:

public class CommunicatingClass : MarshalByRefObject, ICommunicatingClass
{
    public void DoSomething()
    {
        MyClass.Instance.DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

CommunicatingClass是在主AppDomain上创建的,并且工作正常.然后,就是在其AppDomain上创建的插件类,并给出了CommunicatingClass的一个实例:

public class PluginClass
{
    public void DoSomething(ICommunicatingClass communicatingClass)
    {
        communicatingClass.DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,即使CommunicatingClass驻留在主appdomain上(使用立即窗口验证),所有静态数据(如MyClass.Instance和HttpContext.Current)都已消失,并且为null.我有一种感觉MyClass.Instance以某种方式从插件AppDomain中检索,但我不确定如何解决这个问题.

我看到了另一个提出的问题RemotingServices.Marshal,但这似乎没有帮助,或者我错误地使用了它.有没有一种方法可以让CommunicatingClass像主AppDomain中的任何其他类一样访问所有静态方法和属性?

编辑:

PluginClass给出了这样一个实例:

public static PluginClass Create()
{
    var appDomain = GetNewAppDomain();
    var instance = (PluginClass)appDomain.CreateInstanceAndUnwrap(assembly, type);
    instance.Communicator = …
Run Code Online (Sandbox Code Playgroud)

.net c# remoting appdomain

5
推荐指数
1
解决办法
2030
查看次数

使用MarshalByRefObject的任何副作用?

我有一个案例,我必须在AppDomains上使用一些类.为了使它们工作,我让它们继承自MarshalByRefObject.这些类的所有内容都按预期工作.但是这些类在我们的系统中使用,并且99%的时间这些类将仅在一个AppDomain中使用.在单个AppDomain中使用这些类时,继承MarshalByRefObject会产生任何负面影响吗?

谢谢,
跳过

.net c# remoting

5
推荐指数
1
解决办法
451
查看次数

如何将构造函数参数传递给AppDomain.CreateInstanceXXX?

我的类没有默认的无参数构造函数.它有这样一个构造函数:

public Section(string fileName) {...}
Run Code Online (Sandbox Code Playgroud)

我要创建一个我的类的实例AppDomain.如果我的类有一个默认的构造函数,那么我会这样做:

AppDomain domain = AppDomain.CreateDomain("ACAD-0001:409");

ISection section = (ISection)domain.CreateInstanceAndUnwrap(
    typeof(Section).Assembly.FullName, typeof(Section).FullName);
Run Code Online (Sandbox Code Playgroud)

但是没有默认的构造函数.如何传输构造函数的参数?

我希望它的工作方式如下:

string cuiFile = "...";
ISection section = (ISection)domain.CreateInstanceAndUnwrap(
    typeof(Section).Assembly.FullName, 
    typeof(Section).FullName, 
    new object[] { cuiFile });
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

.net c# remoting appdomain c#-4.0

5
推荐指数
1
解决办法
1550
查看次数

标签 统计

remoting ×10

.net ×8

c# ×7

appdomain ×3

business-logic ×1

c#-4.0 ×1

channel ×1

ipc ×1

java ×1

serialization ×1

spring ×1