В настоящее время я работаю над проектом "server-app" / "client-app", целью которого является получение некоторых данных из приложения server в клиентское приложение.Я попробовал это с подходом 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 есть кнопка, которую я нажимаю, чтобы получитьданные из приложения 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' ".
Как можно решить эту проблему?
Примечание. Другие вопросы с похожимназвание не очень помогло мне, пока кто-то не назвал его дубликатом.