2009-10-30 161 views
3

我有一个问题,但首先我想知道如果即时通讯工作的最佳解决方案。将类传递给WCF服务

我正在制作一个应用程序,该应用程序将位于数百台客户端计算机上,并将数据发送到服务器/从数据库中读取数据。服务器将获得该数据并存储/处理它。

我希望客户端应用尽可能轻量级,因此我希望服务器以类的形式传递/接收数据。例如

客户端请求用户ID(用户ID) 服务器响应具有用户名,ID和个人信息的UserDetails类。

另一个例子是

客户端请求项目 服务器ProjectDetails类有项目编号,名称,描述,细节和活动的列表(这是另一个类,所以应该实现为ActivitiesCollection响应)

我刚开始在这个,发现很多人说WCF服务的路要走,但我从来没有写过一个之前。这是真的?如果是的话,我如何将复杂类传递给WCF服务/从WCF服务传递?

感谢所有:)

〜戴夫

回答

11

WCF服务由合同的 - 服务合同定义了服务的行为(例如,您的服务方法,可以调用),然后有它定义了哪些数据被传来传的数据合同。

这些只是.NET类的属性,将它们暴露给WCF运行时。

在你的情况,你可能会碰到这样的:

[ServiceContract] 
interface MyUserService 
{ 
    [OperationContract] 
    UserDetails GetUserDetails(int userId); 
} 

,然后将数据:

[DataContract] 
class UserDetails 
{ 
    [DataMember] 
    int userId { get; set; } 

    [DataMember] 
    string userName { get; set; } 
} 

WCF是非常灵活的,给你很多的控制权和如何发送什么内容,并自动处理所有序列化和其他问题。没有必要自己乱用角度支架汤!

查看WCF Developer Center了解大量优秀内容,操作方法视频,文章等内容 - 应该可以帮助您快速入门!

Marc

+0

冠军的东西队友,我看着数据合同的东西,但它对我毫无意义。这是我见过的最清晰的探索 – TerrorAustralis 2009-10-30 12:54:59

0

为什么不XML序列化数据?不把它当做'类'本身的能力是你可以拥有许多不同的客户端,它们可以针对标准平台不可知的API进行编码。这就是最终使用的服务,允许不同的应用程序和语言与单个终端进行通信。

+0

感谢您的回复。就像我说的,我是WCF服务的新手,只是在这里做一个推荐。该程序只能与Windows平台进行交互,WCF甚至可以采用这种方式? – TerrorAustralis 2009-10-30 03:01:49

+0

再次感谢,我认为我已经通过向我的服务添加项目引用来解决此问题,所以我可以在服务和表单应用中使用相同的类。 – TerrorAustralis 2009-10-30 03:32:25

+0

服务参考只是生成客户端代理。这使得您作为开发人员更容易,因此您不必手动创建请求并处理响应。 – 2009-10-30 03:34:46

2

WCF为您做到这一点。这就像在WCF .NET之前使用Web服务一样 - “结构”是为您创建的,您只需填充它们的属性即可。

  1. 创建服务
  2. 业务对象写它出版这些对象作为方法参数
  3. 生成带你将消费服务的服务代理的服务。

自动生成的服务代理将包含您需要的每个业务对象的类。这很容易。

您的评论,你

通过增加一个项目 指向同我的服务解决了这个问题提这样我就可以通过服务,我 形式的应用程序(原文如此)使用 相同的类。

这是一种合法的方式,但不需要以这种方式共享对象。如果您在客户端上生成服务代理,则会创建这些相同的类。您甚至可以在您的客户端应用程序中保存一些权重,因为只会创建所需的类。

+0

非常感谢评论。你和marc_s真的帮了我,可怜我不能给一个单一的问题两个'答案':) – TerrorAustralis 2009-10-30 12:54:03

+0

如果你喜欢这个答案,你可以标记它!点击“向上”箭头整齐大零:-) – 2009-10-30 15:31:47