C# 如何在远程处理中使用singleton和singleCall
我已经创建了一个远程处理应用程序。Librery类中的代码是C# 如何在远程处理中使用singleton和singleCall,c#,winforms,remoting,C#,Winforms,Remoting,我已经创建了一个远程处理应用程序。Librery类中的代码是 public class InitialClass1:MarshalByRefObject { int i=0; public InitialClass1() { } public string getInitial(string nam) { i++; if (nam.ToLower() == "naresh") re
public class InitialClass1:MarshalByRefObject
{
int i=0;
public InitialClass1()
{
}
public string getInitial(string nam)
{
i++;
if (nam.ToLower() == "naresh") return i.ToString()+").Jadapalli";
else if (nam.ToLower() == "balu") return i.ToString() + "Gonugunta";
else if (nam.ToLower() == "murali") return i.ToString() + "Vempuluri";
else if (nam.ToLower() == "chandra sekhar") return i.ToString() + "Ponnam";
else if (nam.ToLower() == "aneev") return i.ToString() + "Katti";
else if (nam.ToLower() == "rajini") return i.ToString() + "Karlapudi";
else
return i.ToString() + "No results";
}
}
控制台应用程序中的代码是
class Program
{
[STAThread]
static void Main(string[] args)
{
TcpChannel tcp = new TcpChannel(1234);
ChannelServices.RegisterChannel(tcp,false);
string s = ConfigurationManager.AppSettings["remote"];
RemotingConfiguration.RegisterWellKnownServiceType(typeof(InitialClass1),s,WellKnownObjectMode.SingleCall);
Console.WriteLine("Remoting starting...");
Console.ReadLine();
}
}
private void button1_Click(object sender, EventArgs e)
{
label3.Text = Icls.getInitial(textBox1.Text);
}
private void Form1_Load(object sender, EventArgs e)
{
string url = ConfigurationManager.AppSettings["remote"];
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan, false);
RemotingConfiguration.ApplicationName = "TestRemoting";
RemotingConfiguration.RegisterActivatedClientType(typeof(InitialClass1), url);
Icls = new InitialClass1();
}
Windows应用程序中的代码是
class Program
{
[STAThread]
static void Main(string[] args)
{
TcpChannel tcp = new TcpChannel(1234);
ChannelServices.RegisterChannel(tcp,false);
string s = ConfigurationManager.AppSettings["remote"];
RemotingConfiguration.RegisterWellKnownServiceType(typeof(InitialClass1),s,WellKnownObjectMode.SingleCall);
Console.WriteLine("Remoting starting...");
Console.ReadLine();
}
}
private void button1_Click(object sender, EventArgs e)
{
label3.Text = Icls.getInitial(textBox1.Text);
}
private void Form1_Load(object sender, EventArgs e)
{
string url = ConfigurationManager.AppSettings["remote"];
TcpChannel chan = new TcpChannel();
ChannelServices.RegisterChannel(chan, false);
RemotingConfiguration.ApplicationName = "TestRemoting";
RemotingConfiguration.RegisterActivatedClientType(typeof(InitialClass1), url);
Icls = new InitialClass1();
}
它显示异常,因为找不到请求的服务
App.Config文件中的代码为
<configuration>
<appSettings>
<add key="remote" value="tcp://localhost:1234/TestRemoting"/>
</appSettings>
</configuration>
我认为您应该尝试button1\u click方法中的初始化。因为您希望在单击按钮时初始化它。我的错误在于服务器对象是控制台应用程序
TcpChannel tcp = new TcpChannel(1234);
ChannelServices.RegisterChannel(tcp,false);
string s = ConfigurationManager.AppSettings["remote"];
RemotingConfiguration.RegisterWellKnownServiceType(typeof(InitialClass1),s,WellKnownObjectMode.SingleCall);
Console.WriteLine("Remoting starting...");
Console.ReadLine();
请参见注册中的“我正在从app.config文件传递整个url的s值”tcp://localhost:1234/TestRemoting. 这就是问题所在。事实上,我们必须根据您的意愿在服务器对象中提供所需的名称,但在app.config文件中应该只有相同的名称
这里是我的网址tcp://localhost:1234/TestRemoting . 在这种情况下,我们需要将服务器对象中的TestRemoting设置为
RemotingConfiguration.RegisterWellKnownServiceType(typeof(InitialClass1),"TestRemoting",WellKnownObjectMode.SingleCall);
那只是我的问题。现在我的应用程序运行良好 谢谢你的回答。如果我这么做的话。。i值将被初始化事件它是单音:否。。我在客户端对代码做了一些修改。现在显示请求的服务未找到错误。。