C#“ URI已经存在注册” XAML警告

时间:2019-07-10 13:41:11

标签: c# wpf wcf

我目前正在研究“服务器应用程序” /“客户端应用程序”项目,目标是从服务器应用程序向客户端应用程序获取一些数据。我使用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应用程序获取数据。 我刚刚有一个方法绑定了以下内容:

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'已经存在”

我该如何解决这个问题?

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

1 个答案:

答案 0 :(得分:1)

该错误消息表明仍然有一个旧的服务器进程徘徊。尝试在任务管理器中将其杀死,然后重试。

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