我确定我在这里遗漏了一些简单而明显的东西,但我无法找到答案: 我有一个返回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
}
}
我是否需要遍历响应并构建一组重复的客户端窗口小部件?或者我在单独的库中定义窗口小部件并从客户端和服务器引用它?
由于
答案 0 :(得分:0)
最好的方法是将传递的类型(DTO)和服务接口放入共享库中,并在两个项目中引用它。
我还猜测你是基于服务层自动生成客户端的。不要为共享DLL场景执行此操作。看到这篇文章:
http://blog.walteralmeida.com/2010/08/wcf-tips-and-tricks-share-types-between-server-and-client.html