在我的客户端程序中使用WCF服务中的对象

时间:2014-03-12 22:31:13

标签: c# wcf

我确定我在这里遗漏了一些简单而明显的东西,但我无法找到答案: 我有一个返回Widgets的WCF服务。窗口小部件在服务中定义。 在我的客户端程序中,我还定义并使用Widgets。客户端和服务中的Widget定义是相同的。问题是服务返回的Widgets是ServiceReference1.Widget,但客户端程序需要MyProgram.Widget。如何让客户端程序使用服务窗口小部件?

关于服务:

[DataContract]
public class Widget
{
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public decimal Price { get; set; }
}

public class Service1
{
    public async Task<IEnumerable<Widget>> GetAllWidgets()
    {
        await Task.Delay(Util.GetDelay(), CancellationToken.None);
        return GetAllWidgets();
    }   
}

在客户端程序中,我还定义了Widgets。我打电话给服务得到一些:

    public async Task<List<Widget>> GetWidgetsAsync() // expects MyProgram.Widget
    {
        using (ServiceReference1.Service1Client client = 
                 new ServiceReference1.Service1Client()) 
        {
            var response = await client.GetAllProductsAsync();
            return response;  // gets ServiceReference1.Widget
        }
    }

我是否需要遍历响应并构建一组重复的客户端窗口小部件?或者我在单独的库中定义窗口小部件并从客户端和服务器引用它?

由于

1 个答案:

答案 0 :(得分:0)

最好的方法是将传递的类型(DTO)和服务接口放入共享库中,并在两个项目中引用它。

我还猜测你是基于服务层自动生成客户端的。不要为共享DLL场景执行此操作。看到这篇文章:

http://blog.walteralmeida.com/2010/08/wcf-tips-and-tricks-share-types-between-server-and-client.html