Я использую шаблон MVVM Light для создания внешнего интерфейса WPF.Этот интерфейс будет вызывать веб-сервис для получения данных с сервера приложений.Сервер приложений является проприетарным сервером приложений Vendor, который предоставляет веб-методы через .dll.
Мне нужно получить сеанс клиента с сервера, чтобы получить результаты с сервера.Проблема в том, что когда я вызываю свою модель, которая имеет соединение с сервером, я получаю следующую ошибку:
'The invocation of the constructor on type [APP].ViewModel.ViewModelLocator' that matches the specified binding constraints threw an exception.' Line number '12' and line position '10'.
Когда вынимаю строку
cashaccount.getConnection();
Системапродолжает и создает окно WPF с сеткой данных из набора инструментов WPF.
MainWindow.xaml
<Window x:Class="CreditSuisse.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
mc:Ignorable="d"
Height="301"
Width="520"
Title="MVVM Light Application"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/MainSkin.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<dg:DataGrid ItemsSource="{Binding Path=CashAccount}"
Margin="5" AutoGenerateColumns="False">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Binding="{Binding AcctCd}" Header="Account Code" />
<dg:DataGridTextColumn Binding="{Binding AcctCd}" Header="Security Name" />
<dg:DataGridTextColumn Binding="{Binding QtySod}" Header="Quantity Start of Day" />
<dg:DataGridTextColumn Binding="{Binding QtySod}" Header="Cash Delta (Price Delta)" />
<dg:DataGridTextColumn Binding="{Binding QtySod}" Header="Action" />
</dg:DataGrid.Columns>
</dg:DataGrid>
</Window>
ViewModel.cs
public MainViewModel()
{
if (IsInDesignMode)
{
// Code runs in Blend --> create design time data.
}
else
{
logger.Info("----- Start -----");
cashaccount.getConnection();
}
}
Я сокращенно обозначил дляРади краткости.
Вот модель
CashAccount.cs
public class CashAccount : xx.xx.Position
{
private bool cashChanged=false;
private string secName = null;
private xxx.Wsi.ClientSession privateSession;
private static Logger logger = LogManager.GetCurrentClassLogger();
public bool didCashChange
{
get
{
return cashChanged;
}
set
{
this.cashChanged = value;
}
}
public void getConnection()
{
try
{
app.Helper.Session session = new Session();
privateSession = session.getSession();
}
catch (TransportException e)
{
Console.WriteLine("Error communicating with server: " + e.Message);
logger.Info("Couldn't log into xxx...");
logger.Error(e.Message);
}
{
}
}
}
}
Я смотрю, будет ли сервисный агент лучшим подходом.Если у кого-то есть идеи, я буду признателен.