C# "A registration already exists for URI" XAML 警告
C# "A registration already exists for URI" XAML Warning
我目前正在做一个 "server-app" / "client-app" 项目,目标是从 server-app 获取一些数据到客户端应用程序。我尝试使用 WCF 方法进行此操作,但由于我从未使用过 WCF,所以这对我来说不是一件容易的事。
所以我已经设置的是一个解决方案中的两个应用 à 两个不同的项目。项目一包含 server-app (TRunnerServer),项目二包含 client-app (TRunnerClient)。
我已经为服务设置了这样的接口(在 ServerApp MainWindowViewModel.cs 中):
[ServiceContract]
public interface ITRunnerService
{
[OperationContract]
ObservableCollection<Program> GetProgramList();
}
我已经将方法添加到 class 等中,如下所示:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
internal class MainWindowViewModel : ViewModelBase, ITRunnerService
{
public ObservableCollection<Program> GetProgramList()
{
return this.ProgramList;
}
public MainWindowViewModel()
{
var uris = new Uri[1];
string addr = "net.tcp://localhost:7000/MainWindowViewModel";
uris[0] = new Uri(addr);
ITRunnerService tRunnerService = this;
ServiceHost host = new ServiceHost(tRunnerService, uris);
var binding = new NetTcpBinding(SecurityMode.None);
host.AddServiceEndpoint(typeof(ITRunnerService), binding, string.Empty);
host.Open();
}
}
现在,在应用程序 TRunnerClient 的 GUI 中,我有一个按钮,按下该按钮可从 TRunnerServer 应用程序获取数据。
我刚刚得到一个与以下内容绑定的方法:
private void Refresh(object parameter)
{
var uri = "net.tcp://localhost:7000/MainWindowViewModel";
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
var channel = new ChannelFactory<ITRunnerService>(binding);
var endPoint = new EndpointAddress(uri);
var proxy = channel.CreateChannel(endPoint);
this.ProgramList = proxy.GetProgramList();
}
然而,当我启动应用程序时,只有客户端正常启动,服务器应用程序根据 xaml "A registration already exists for URI 'net.tcp://localhost:7000/MainWindowViewModel'".
的错误警告给出异常
我该如何解决这个问题?
注意:在有人将其视为重复之前,具有类似标题的其他问题并没有真正帮助我。
错误消息表明有一个旧的服务器进程仍在运行。尝试在任务管理器中将其杀死,然后重试。
为了避免挂起进程,请确保您正常退出应用程序,并且不要创建任何您不显示和关闭的 windows。
我目前正在做一个 "server-app" / "client-app" 项目,目标是从 server-app 获取一些数据到客户端应用程序。我尝试使用 WCF 方法进行此操作,但由于我从未使用过 WCF,所以这对我来说不是一件容易的事。
所以我已经设置的是一个解决方案中的两个应用 à 两个不同的项目。项目一包含 server-app (TRunnerServer),项目二包含 client-app (TRunnerClient)。
我已经为服务设置了这样的接口(在 ServerApp MainWindowViewModel.cs 中):
[ServiceContract]
public interface ITRunnerService
{
[OperationContract]
ObservableCollection<Program> GetProgramList();
}
我已经将方法添加到 class 等中,如下所示:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
internal class MainWindowViewModel : ViewModelBase, ITRunnerService
{
public ObservableCollection<Program> GetProgramList()
{
return this.ProgramList;
}
public MainWindowViewModel()
{
var uris = new Uri[1];
string addr = "net.tcp://localhost:7000/MainWindowViewModel";
uris[0] = new Uri(addr);
ITRunnerService tRunnerService = this;
ServiceHost host = new ServiceHost(tRunnerService, uris);
var binding = new NetTcpBinding(SecurityMode.None);
host.AddServiceEndpoint(typeof(ITRunnerService), binding, string.Empty);
host.Open();
}
}
现在,在应用程序 TRunnerClient 的 GUI 中,我有一个按钮,按下该按钮可从 TRunnerServer 应用程序获取数据。 我刚刚得到一个与以下内容绑定的方法:
private void Refresh(object parameter)
{
var uri = "net.tcp://localhost:7000/MainWindowViewModel";
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
var channel = new ChannelFactory<ITRunnerService>(binding);
var endPoint = new EndpointAddress(uri);
var proxy = channel.CreateChannel(endPoint);
this.ProgramList = proxy.GetProgramList();
}
然而,当我启动应用程序时,只有客户端正常启动,服务器应用程序根据 xaml "A registration already exists for URI 'net.tcp://localhost:7000/MainWindowViewModel'".
的错误警告给出异常我该如何解决这个问题?
注意:在有人将其视为重复之前,具有类似标题的其他问题并没有真正帮助我。
错误消息表明有一个旧的服务器进程仍在运行。尝试在任务管理器中将其杀死,然后重试。
为了避免挂起进程,请确保您正常退出应用程序,并且不要创建任何您不显示和关闭的 windows。