如何允许客户端服务在WCF服务中构建复杂对象?

时间:2011-11-28 16:02:46

标签: wcf web-services interop

我制作了一个简单的PasteBin演示示例,说明了我的代码:http://pastebin.com/GpDhPRVm

我的实际Process对象非常复杂,包括将任务,文档,工作流等的集合添加到Process对象中,并通过方法等设置属性。

我的PasteBin example非常简单,可以显示出事情发生的地方。在我的服务中的Process方法中包含CreateNewProcess对象(如下面的代码所示),允许服务用户自动“查看”其实例中的Process对象,属性和枚举器客户方。

<ServiceContract()>
Public Interface ICreateProcess

    <OperationContract()>
    Sub CreateNewProcess(ByVal newprocess As Process)

End Interface

但是,它不允许他们使用任何方法,如“AddTask”方法(shown in PasteBin example),也不会公开TaskTaskCollection对象。即使我用DataContractOperationContract等装饰方法,它们仍然对客户端服务不可见。

这是我的主要问题:我需要客户端服务才能完全“构建”Process对象,然后将其传递给CreateNewProcess方法。

另一个小注意事项:(以避免评论问我)是我确保我的所有属性都是可互操作的简单类型,因为它需要能够用于Java - 不只是.NET客户端。

1 个答案:

答案 0 :(得分:0)

好的,我在我的一个朋友的帮助下弄明白了。

不能在.svc服务类之外使用任何方法;只有属性,枚举和子对象才会转化为客户端。 (我想这个)

然后,您必须使用通用的Collection类型,而不是使用List

所以,而不是:

    Public Tasks As New TaskCollection() 'where TaskCollection inherits from Collection

我需要这样做:

    Public Tasks As List(Of Task)

客户端只需要构建自己的Tasks数组并将其分配给t.Tasks属性。

现在就像魅力一样:http://pastebin.com/rt8HwsXY