2012-03-26 115 views
0

我正在编写一个WCF服务和代码来使用它,我想在这些服务之间共享数据类型。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

完全有可能以这种方式重用您的类型。如果您手动创建客户端代理,则可以更好地控制此行为,包括命名空间。代理不需要对共享数据类型做任何事情,它们可以从代理中排除,因此只存在于共享程序集中的一个名称空间中。