我正在编写一个WCF服务和代码来使用它,我希望在这些服务之间共享数据类型。
我有一个WCF库,其中包含我想要共享的类型。我的WCF服务和我的WCF客户端都引用了库中的程序集。类看起来像这样:
<DataContract()> _
Public Class MyEntity
Private _culture As String = String.Empty
Private _name As String = String.Empty
<DataMember()> _
Public Property ID As Integer
Get
Return _id
End Get
Set(ByVal Value As Integer)
_id = Value
End Set
End Property
<DataMember()> _
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal Value As String)
_name = Value
End Set
End Property
End Class
我想在我的消费应用程序中做的是创建一个MyEntity实例,并将它的值赋给我服务中方法的返回值,当然,它返回一个MyEntity实例。
所以当我从我的客户端添加对我的服务的引用并给服务命名空间命名为“MyWCF”时,我希望这样:
Dim entity as new MyEntity
dim srv as new MyWCF.MyServiceClient
entity = srv.MyMethod()
现在,当我这样做时,编译器给了我一个错误,因为它不能隐式地将类型myclientnamespace.MySCF.Myclass转换为myclientnamespace.MyClass。我已阅读帖子here和文章here - 这是在另一个stackoverflow线程中引用的。这些说明如果我的客户端代码引用与我的服务代码相同的程序集,并且我在之前有中的程序集引用 我创建服务引用,客户端代码应该不创建代理类,而是使用引用的实体程序集中的类。我试过这个并没有用。我甚至确保在创建服务引用时选中“在所有引用的程序集中重用类型”单选按钮。
我的问题是:
谁能看到我在这里做错了什么?是否应在实体程序集引用后创建服务引用不会导致重用类型?
是否可以以这种方式重用类型?
非常感谢任何建议。谢谢!
答案 0 :(得分:0)
完全可以以这种方式重用您的类型。如果您手动创建客户端代理,则可以更好地控制此行为,包括命名空间。代理不需要对共享数据类型执行任何操作,它们可以从代理中排除,因此只存在于共享程序集中的一个名称空间中。