标签: .net-remoting

WCF与.Net Remoting

根据这篇文章,带有命名管道的WCF是IPC的最佳选择,它比.Net Remoting快25%左右.

我有以下代码将WCF与命名管道与.Net Remoting进行比较:

[ServiceContract]
internal interface IRemote
{
    [OperationContract]
    string Hello(string name);
}

[ServiceBehavior]
internal class Remote : MarshalByRefObject, IRemote
{
    public string Hello(string name)
    {
        return string.Format("Hello, {0}!", name);
    }
}

class Program
{
    private const int Iterations = 5000;

    static void Main(string[] args)
    {
        TestWcf(Iterations);
        TestRemoting(Iterations);

        TestWcf(Iterations);
        TestRemoting(Iterations);

        TestWcf(Iterations);
        TestRemoting(Iterations);

        Console.ReadKey();
    }

    private static void TestRemoting(int iterations)
    {
        var domain = AppDomain.CreateDomain("TestDomain");

        var proxy =
            (IRemote)
            domain.CreateInstanceFromAndUnwrap(Assembly.GetEntryAssembly().Location, "ConsoleApplication6.Remote");

        Console.WriteLine("Remoting: {0} ms.", Test(proxy, iterations));
    }

    private …
Run Code Online (Sandbox Code Playgroud)

c# wcf named-pipes .net-remoting

29
推荐指数
3
解决办法
9906
查看次数

我可以用throw删除空捕获吗?

我希望这很简单.我在一个大的代码库上工作,总体质量很好,但偶尔你会得到一些:

try
{
   // Calls a .NET remoting method.
}
catch
{
   throw;
}
Run Code Online (Sandbox Code Playgroud)

注意,没有最终的逻辑,catch没有指定任何异常或做除了我上面提供的任何其他操作.但是,我知道捕获和重新抛出可以改变异常细节中的调用堆栈.我不确定的是,这种行为是否特别是因为.NET远程调用.

删除这个try-catch是否安全?据我所知,它是,但我想我会先检查一下所有奇怪的行为.

.net c# exception-handling .net-remoting

24
推荐指数
3
解决办法
1702
查看次数

.Net Remoting与WCF

我想知道我可以从.net远程处理和WCF做同样的事情,那么为什么WCF比.Net远程处理更受欢迎.我在哪里可以选择(或在哪种情况下).Net远程处理或WCF?

c# wcf .net-remoting

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

未找到请求的服务

我有一个使用远程工作的Windows服务应用程序.它用于显示气球尖端.但是,它有时会抛出此错误:

Exception :Requested Service not found
Inner Exception : Stack Trace : Server stack trace: at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Baloontip.clsBaloonTool.Messagebox(String Message)

任何人都可以帮我解决这个问题.

.net c# remoting .net-remoting

18
推荐指数
1
解决办法
8259
查看次数

在Dummy线程中调用主线程中执行Python函数

我有一个Python脚本,可以处理来自.NET Remoting的异步回调.这些回调在虚拟(工作)线程中执行.从我的回调处理程序里面,我需要调用我在脚本中定义的函数,但是我需要在主线程中执行该函数.

主线程是一个向服务器发送命令的远程客户端.其中一些命令导致异步回调.

基本上,我需要相当于.NET的Invoke方法.这可能吗?

python multithreading .net-remoting

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

Web服务和远程处理有什么区别?

我知道Web服务并且对远程处理有一些了解.这两个概念都在客户机上调用方法,所以区别在哪里?

通过远程处理我们也可以在远程机器上执行该方法,同样的功能也可以通过Web服务实现.

如果这是一个明显的问题,请原谅我..

.net c# wcf web-services .net-remoting

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

WCF真的取代了.NET Remoting吗?

我可以理解WCF通常比Remoting更好,但两者看起来与我完全不同.MS制作这张漂亮的照片,以显示WCF有多棒(或者其他技术人员每次仅检查一个盒子的差距): alt text http://i.msdn.microsoft.com/dynimg/IC371617.jpg

但是,WCF以SOA为中心,我认为假设每个联网应用程序都希望公开服务是不正确的.

在我的情况下,我正在寻找在不同PC上的两个服务器应用程序实例之间复制对象的方法.WCF似乎只是提供了一个现代版本的COM ...获取一个对象并调用方法,它神奇地调用另一台PC上的版本.但Remoting似乎做了一些完全不同的事情,我不清楚为什么它被弃用而不被类似的技术取代.

那么,MS甚至声称Remoting已经死了吗?或者他们仍然支持它,承认它 WCF 并列吗?

.net c# wcf .net-remoting

10
推荐指数
1
解决办法
9019
查看次数

.NET远程服务似乎崩溃,并停止响应客户端

我有一个.NET Remoting服务,大部分时间都可以正常工作.如果发生异常或错误,它会将错误记录到文件中,但仍会继续运行.

但是,大约每两周一次服务停止响应客户端,这会导致客户端应用程序因SocketException崩溃并显示以下消息:

A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Run Code Online (Sandbox Code Playgroud)

没有异常或堆栈跟踪写入我们的日志文件,所以我无法弄清楚服务崩溃的位置,这使我相信它在我的代码之外的某个地方失败了.我可以采取哪些额外步骤来找出这次崩溃的根本原因?我会想象它会在某个地方向EventLog写一些东西,但我对Windows的事件记录系统并不是很熟悉,所以我不确定在哪里看.

在此先感谢任何帮助.

编辑:忘记提及,停止或重新启动服务什么都不做,服务永远不会响应.在我再次启动服务之前,我需要手动终止进程.

编辑2:

public class ClientInfoServerSinkProvider :
       IServerChannelSinkProvider
   {
      private IServerChannelSinkProvider _nextProvider = null;

      public ClientInfoServerSinkProvider()
      {
      }

      public ClientInfoServerSinkProvider(
              IDictionary properties,
              ICollection providerData)
      {
      }

      public IServerChannelSinkProvider Next
      {
         get { return _nextProvider; }
         set { _nextProvider = value; }
      }

      public IServerChannelSink CreateSink(IChannelReceiver channel)
      { …
Run Code Online (Sandbox Code Playgroud)

.net c# event-log .net-remoting

10
推荐指数
2
解决办法
1036
查看次数

获取对象的AppDomain

有没有办法确定哪个AppDomain是对象或ObjectHandle实例创建的?

.net c# remoting .net-remoting

9
推荐指数
2
解决办法
2393
查看次数

当您通过.NET Remoting从远程对象返回Stream时,封面下会发生什么

我正Streams从远程服务返回(.NET Remoting).但Streams也是一次性用品,我们都知道这些是待处理的.

Dispose完成消费之后,我可以在客户端打电话.但是,当我Stream从远程对象返回时,我想知道封面下究竟发生了什么.

特别:

  1. 我应该更好地阅读所有内容byte[]并返回而不是一个Stream
  2. 或者.NET远程控制是否完全适合我?
  3. 如果没有,返回Stream与返回不同的是byte[]什么?最后,还是.NET Remoting必须以某种方式序列化数据?
  4. 呼叫Dispose客户端甚至是否有任何影响?客户端对象和服务器端对象之间是否存在神奇的连接?我认为一旦它在封面后反序列化,在呼叫Dispose()客户端或在那里是没有意义的?

我在这里回答Mike Bild,因为我也希望稍微改进一下这个问题

好的,所以回流到服务器的流是(对我来说至少)意想不到的.

为了获取远程对象,必须执行以下操作:

public static class ServiceFactory <T>
{   
    public static T CreateProxy()
    {
        Type interfaceType = typeof(T);

        string uri = ApplicationServer.ServerURL + interfaceType.FullName;

        return (T)Activator.GetObject(interfaceType, uri);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您明确要在某个URI上使用特定的远程对象.当该远程对象上的方法返回一个继承自MarshallByRefObject的对象时,这意味着它自动与远程端的对象相关联?好吧,使用我自己构建的测试对象,这应该很容易重现.所以这也意味着我应该在客户端调用Dispose并将其代理回服务器端的对象?

.net c# remoting dispose .net-remoting

9
推荐指数
1
解决办法
502
查看次数