2012-03-26 154 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

完全有可能以這種方式重用您的類型。如果您手動創建客戶端代理,則可以更好地控制此行爲,包括命名空間。代理不需要對共享數據類型做任何事情,它們可以從代理中排除,因此只存在於共享程序集中的一個名稱空間中。