我第一次测试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方法(使用我的示例中的方法和类型)。有什么想法吗?

有帮助吗?

解决方案

您需要通过文件顶部的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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top