我制作了一个简单的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),也不会公开Task
或TaskCollection
对象。即使我用DataContract
,OperationContract
等装饰方法,它们仍然对客户端服务不可见。
这是我的主要问题:我需要客户端服务才能完全“构建”Process
对象,然后将其传递给CreateNewProcess
方法。
另一个小注意事项:(以避免评论问我)是我确保我的所有属性都是可互操作的简单类型,因为它需要能够用于Java - 不只是.NET客户端。
答案 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