2009-08-14 75 views
2

我有一個類庫,我想將它作爲WCF服務公開給外部世界。我的課程包含抽象類,普通類,枚舉類等。將類庫公開爲WCF服務

我簡單瞭解人們可以在他們的項目中爲我的類庫製作「服務引用」,然後他們開始使用它。

我該如何實現這個目標?

+0

...和你的問題是什麼? – 2009-08-14 09:14:56

+0

@All:我認爲這是一個真正的問題,只是有點困惑。OP似乎認爲揭露他的班級圖書館會給他的客戶提供一個班級圖書館的副本。然而,他之前使用過「添加服務參考」,並認爲它沒有完成。他想知道他做錯了什麼。 – 2009-08-14 09:41:40

回答

2

如果您還沒有完成這個還沒有,你可以不啓動從一個大錯救自己。

類庫被設計成類庫。服務旨在成爲服務。他們是不同目標的兩種不同的東西。

例如,您可能已經定義了一個枚舉和一個具有該枚舉類型屬性的EventArgs派生類,以及一個接受該EventArgs類型的事件處理程序委託,並且您可能有一個或多個暴露的類使用該委託類型的事件。

這些事情都沒有任何意義暴露在服務!

相反,你應該做的是設計你的服務,以暴露你想暴露的功能。爲了做到這一點,服務當然會使用你的類庫。

一個類庫和一個服務的不同之處在於一個服務應該被設計爲跨平臺可用。考慮一下當一個Java客戶端使用你的服務時會發生什麼:它將有一個代理類來對應你的服務公開的操作。這些代理方法將具有原始類型的參數以及與傳遞到服務的數據結構相匹配的代理類型。

Java客戶端顯然不會使用您的服務器端操作使用的相同.NET類型!

構建.NET客戶端的默認方式的工作方式與通過代理類完全相同。你的問題表明你期望暴露類庫會將實際的類導出到客戶端。事實並非如此。如果您決定將客戶端耦合到服務器使用的確切.NET類,則客戶端需要擁有服務器端程序集,就像客戶端使用普通的類庫一樣。

+0

非常感謝,這絕對有道理。 – Bhaskar 2009-08-14 10:14:23

+0

我知道我遲到了3年,但希望你會看到這個消息。如果您要將程序集附加到服務中以執行所有POCO類型的行爲,那麼您將如何將類似對象發送回客戶端以供使用?只需在界面中創建一個僅具有屬性的對象並將其來回傳遞以進行修改?或者還有其他一些做法嗎?我被困在這種情況下,我需要使用庫來處理服務中的事情。我正在尋找某種最佳實踐。 – Sinaesthetic 2012-05-23 14:39:30

+0

@Sinaesthetic:你需要提出一個問題。這是一個問答網站,而不是論壇。 – 2012-05-23 14:42:09

1

類和枚舉可以通過WCF公開。然而,抽象類將是一個問題,但無論如何將它們作爲服務公開是沒有意義的。

對於枚舉,你將不得不添加[EnumMember]屬性,例如:

public enum Sex 
{ 
    [EnumMember] 
    Unknown, 
    [EnumMember] 
    Male, 
    [EnumMember] 
    Female 
} 

WCF的整個主題是有點過於寬泛,涵蓋所有在這裏雖然。只要看看會發生什麼情況,如果遇到麻煩,請提出更具體的問題。

+0

什麼是bindinf方法,它會是一個wsHttpBinding或nrtTcpBinding。你能提供一些鏈接,可以指導我這樣做。 – Bhaskar 2009-08-14 09:34:20