2

我正在涉足 Web 服务领域,并且一直在制作一个简单的 Web 服务来模拟数学运算。首先它很简单,传入两个整数,然后根据调用的方法将二元运算符应用于这些(加号、减号等)。

然后我决定让事情变得更复杂一些,并开始传递对象,但后来我发现 Web 服务只公开了类的数据方面,而不是功能方面。

有人告诉我,解决这个问题的一个好方法是让服务端的类成为一个部分类(类封装形式的这一端),而在客户端有另一个部分类(类的这一端封装功能)。这似乎是一种优雅的做事方式..

所以,我已经如上所述设置了两个类,但它似乎并没有像我被告知的那样工作。

我正在尝试的可能吗?如果是这样,我哪里错了?

4

4 回答 4

2

分部类实际上是一种将自动生成的代码与开发人员代码分开的工具。

一个很好的例子是 VS 中的 windows 窗体设计器,或者新的 DBML Linq DataContext 生成代码。

还有一个论点是将它们与 VSS 风格的源代码控制提供程序一起使用,其中任何时候只有一个用户可以编辑文件。

将它们用于功能的逻辑分离并不是一个好主意 - 该划分仅存在预编译。编译后,您只得到一个类,但没有一个易于调试或跟踪内部操作的类。

您所描述的听起来像是使用 WCF 合同的一个非常好的情况。在这种情况下,客户端和服务器都将共享一个接口(或多个接口)。

您的复杂代码会去那里,并且可以单独进行单元测试 - 即在您连接的应用程序之外。然后,当发现错误时,您可以快速消除代码问题并转而调查与连接相关的问题。

于 2008-10-22T19:47:48.500 回答
0

(这个线程可能已经死了,但是......)我正在考虑做类似的事情,但在(在我的情况下)Windows服务上具有功能。

客户端程序和 Windows 服务都需要访问数据,但只有服务需要对数据进行实际操作;它们都包含在一个 dll 中,该 dll 包含一个包含合同数据成员的部分类,但是我收到一个错误,说这个部分类与我的服务上的部分类冲突,即使它们都在同一个命名空间中,而且目前,服务器的部分类为空。

于 2009-12-23T10:56:53.553 回答
0

不是部分课程。部分类是一种语法结构,它使您能够在不同的源文件中拥有类的不同部分。但是,部分类的所有部分最终都编译成同一个二进制文件。

您可以使用扩展方法向您的类添加表示数据协定的功能。

您还可以尝试在共享程序集中实现该类,并使用 svcutil.exe /reference 将其导入客户端代理,而不是在 Web 服务命名空间中使用全新的声明。

于 2008-10-22T16:34:41.933 回答
0

正如弗朗西所说,它只是允许您将同一类的不同部分放入不同的文件中。

相反,您应该如何构建事物实际上取决于您在做什么。如果我是你,我可能会有一个相当简单的数据承载类和一个可用于处理该数据的消费者。

使用共享程序集也是一个好主意。但是,如果您真的希望能够将代码从服务器发送到客户端,CSharpCodeProvider 就可以了。

于 2008-10-22T19:28:31.537 回答