【问题标题】:Singleton Class in Assembly Help using Remoting装配帮助中的单例类使用远程处理
【发布时间】:2012-11-22 14:41:03
【问题描述】:

我在一个程序集中有一个班级,我希望成为一个单身人士。我希望它由我的服务器应用程序创建,然后允许另一个应用程序在同一台机器上访问这个类实例。

我正在使用这种延迟加载实现来确保只存在一个实例:

Private Shared ReadOnly _instance As New Lazy(Of PersonX)(Function() New PersonX(), System.Threading.LazyThreadSafetyMode.ExecutionAndPublication)

Public Shared ReadOnly Property Instance() As PersonX
    Get
        Return _instance.Value
    End Get
End Property

然后我使用带有以下远程处理代码的 Private Sub New:

Dim uri As String = String.Format("tcp://{0}:{1}/PersonX", "localhost", 1976)
RemotingServices.Marshal(Person.Instance, uri)
RemotingConfiguration.RegisterActivatedServiceType(GetType(PersonX))

在我的调用代码中,我创建了我的第一个实例:

Dim PersonX as SingletonTestClass.PersonX = SingletonTestClass.PersonX.Instance

我正在使用以下代码通过远程处理连接到实例:

Dim newPerson As SingletonTestClass.PersonX
Dim uri As String = String.Format("tcp://{0}:{1}/PersonX", "localhost", 1976)
newPerson = CType(Activator.GetObject(GetType(SingletonTestClass.PersonX), uri), SingletonTestClass.PersonX)

但是现在当我尝试访问对象属性时,我在此行收到错误找不到请求的服务

newPerson.Name = "Fred"

【问题讨论】:

  • 只是好奇,您使用 Remoting 而不是 WCF 有什么特别的原因吗?
  • @raymond - 我一直相信远程处理更容易实现并且执行速度更快
  • 我在这两个方面都有经验,我更喜欢 WCF。我们的大型项目已转换为 WCF,基于 TCP 的二进制文件。

标签: .net vb.net singleton remoting


【解决方案1】:

要回答您的问题,您需要在编组 Remoting 对象之前注册一个频道:

查看简单、有效的 C# 示例:

public class Test : MarshalByRefObject
    {
        public string Echo(string message)
        {
            return "Echo: " + message;
        }
    }

private void button1_Click(object sender, EventArgs e)
        {
            ChannelServices.RegisterChannel(new TcpChannel(1234));
            Test test1 = new Test();
            RemotingServices.Marshal(test1, "TestService");

            Test test2 = (Test)Activator.GetObject(typeof(Test), "tcp://localhost:1234/TestService");
            MessageBox.Show(test2.Echo("Hey!"));
        }

确保防火墙没有阻塞端口。

【讨论】:

  • 谢谢,但这似乎没有任何效果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
相关资源
最近更新 更多