我刚刚开始使用WCF服务执行我的第一步,并构建了一个显示从WCF服务检索的数据的WPF应用程序。我将应用程序拆分为两个项目:一个包含(WPF)UI的项目和一个包含WCF服务客户端的第二个项目。
将端点定义从第二个项目的app.config复制到第一个项目的app.config(当然是StartUp项目)后,应用程序正在运行。
但是自从我开始使用WCF服务客户端以来,XAML设计器就不再起作用了。它总是显示异常:
在ServiceModel客户端配置部分中找不到引用合同“MyContract”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素。
这与将端点定义复制到另一个app.config文件之前的异常完全相同。所以我猜XAML设计师不使用这种配置。是否有可能解决这种奇怪的行为?如果XAML设计师根本不使用WCF(它不应该做恕我直言)并且只使用一些默认数据,那对我来说没问题。
我已经考虑过使用RhinoMocks在 DesignerMode 案例中存根WCF服务客户端,但是对异步WCF调用进行存根并不是最简单的事情。
有什么想法吗?
答案 0 :(得分:5)
我发现了如何避免这个问题:如果我在业务对象上调用任何东西,而且从ViewModel的构造函数(在主窗口的XAML中定义为DataContext)进行WCF通信,那么XAML设计器似乎不起作用。文件)。
一个简单的
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
return;
}
在访问业务对象之前,使XAML设计器再次工作。
答案 1 :(得分:0)
此外 - 相反的工作;即,通过将服务引用内容移动到'main'app.config,可以通过'child'项目找到它。
答案 2 :(得分:0)
有同样的问题。
我的解决方案是将视图模型分配从xaml
移动到.cs
代码文件。
第1步:删除你的xaml:
<Window.DataContext>
<viewModel:MainViewModel/>
</Window.DataContext>
第2步:在.cs代码文件中添加到窗口构造函数:
DataContext = new MainViewModel();