我第一次测试WPF,我正在尝试使用ObjectDataProvider调用WCF服务。
WCF服务使用单个方法命名为WcfService1:
namespace WcfService1
{
public class Service1 : IService1
{
public String HelloWorld()
{
return "Hello World!";
}
}
}
我在我的WPF项目中添加了一个服务引用,并将其命名为TestService
在我的主窗口中,我可以在代码背后无问题地调用它。看起来很简单;比如网络服务电话:
TestService.Service1Client service = new TestService.Service1Client(); MessageBox.Show(service.HelloWorld());
我正在尝试创建一个指向此服务的ObjectDataProvider。我想我对ObjectType应该是什么感到困惑?我试过local,服务命名空间,src;我输了:
<Window.Resource>
<ObjectDataProvider
x:Key="odpTestService"
ObjectType="{x:Type **TestService**:Service1Client}"
MethodName="HelloWorld" />
</Window.Resources>
最终它将绑定到TextBlock:
<TextBlock Grid.Column="0" Grid.Row="0"
Grid.ColumnSpan="2" Background="AliceBlue"
Text="{Binding Source={StaticResource odpTestService}}" />
我尝试使用此处发布的Flickr示例:http://khason.net/blog/wpf-binding-to-wcf-and-more/
更新 丹尼斯的答案确实在这里解决了部分问题。现在,我在编译时遇到错误: System.Windows.Data错误:34:ObjectDataProvider:尝试在类型上调用方法失败;
ObjectDataProvider无法调用类型为IService1的HelloWorld方法(使用我的示例中的方法和类型)。有什么想法吗?
答案 0 :(得分:1)
您需要通过文件顶部的xmlns指令导入服务的命名空间:
假设引用已直接添加到您的应用程序,并且您的应用程序的根命名空间是“MyApplication”:
<Window x:class="MyApplication.MyWindow"
xmlns:srv="MyApplication.TestService">
<Window.Resource>
<ObjectDataProvider
x:Key="odpTestService"
ObjectType="{x:Type srv:Service1Client}"
MethodName="HelloWorld" />
</Window.Resources>
<TextBlock Grid.Column="0" Grid.Row="0"
Grid.ColumnSpan="2" Background="AliceBlue"
Text="{Binding Source={StaticResource odpTestService}}" />
</Window>