C#"URI 的注册已存在"XAML 警告



我目前正在从事一个"服务器应用程序"/"客户端应用程序"项目,目标是将一些数据从服务器应用程序获取到客户端应用程序。我尝试过使用 WCF 方法,但由于我从未使用 WCF 工作过,这对我来说不是一件容易的事。

所以我已经设置了一个解决方案中的两个应用程序 à 两个不同的项目。项目一包含服务器应用程序(TRunnerServer),项目二包含客户端应用程序(TRunnerClient)。

我已经为服务设置了这样的界面(在ServerApp MainWindowViewModel.cs中):

[ServiceContract]
public interface ITRunnerService
{
[OperationContract]
ObservableCollection<Program> GetProgramList();
}

比我已将方法添加到类等中,如下所示:

[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 App获取数据。 我刚刚有一个绑定了以下内容的方法:

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 的错误警告给出异常"URI 'net.tcp://localhost:7000/MainWindowViewModel'的注册已存在"。

我该如何解决这个问题?

注意:其他标题相似的问题在有人将其视为重复之前并没有真正帮助我。

错误消息指示仍有旧的服务器进程挂起。尝试在任务管理器中杀死它,然后重试。

为了避免进程挂起,请确保正常退出应用程序,并且不会创建任何不显示和关闭的窗口。

最新更新