2008-11-08 57 views
5

說我有如下的界面,我想我的服務器(一個普通的web服務)和我的客戶(一個Silverlight 2.0的應用程序)之間共享:共享服務接口,並在Silverlight模型中,使用WCF

public interface ICustomerService 
{ 
    Customer GetCustomer(string name); 
} 

我的Web服務實現了這個接口,並引用Customer類型定義類庫。

通常,如果你想消費從WCF客戶端這個服務,說WinForms應用程序,你可以分享你的模型組裝和服務合同的接口。然後,通過使用ChannelFactory,您可以動態地創建一個實現你的服務接口的代理。就像:

ICustomerService myService = new ChannelFactory<ICustomerService>(myBinding, myEndpoint); 
Customer customer = myService.GetCustomer("romain"); 

我基本上想做同樣的事情,但從一個Silverlight 2.0應用程序。銀光ChannelFactory似乎並不像其他人一樣...

你知道這是否可能嗎?

注意:由於Silverlight應用程序只能是指Silverlight的項目,我有:MyModel.dll的

兩個版本包含Customer類型:

  • 一個編譯靶向.NET Framework 3.5的,引用通過我的網絡服務項目
  • 另一個編譯的目標Silverlight 2.0框架,引用我的Silverlight應用程序

MyServicesContracts.dll的兩個版本包含ICustomerService接口:

  • 一個編譯靶向.NET Framework 3.5的,我的網絡服務項目
  • 引用另一個編譯靶向Silverlight的2.0框架,通過我的Silverlight應用程序
  • 引用

回答

3

我想你會發現這個thread有趣。您可以共享不同項目之間的代碼文件或者編譯針對多個目標的單一項目。

0

我可能是錯的,但我認爲如果您使用DataContract和DataMember屬性修飾WCF服務返回的對象,則應該能夠在您的Silverlight應用程序和WCF服務之間共享對象,而無需在客戶端中創建類(應該由代理來處理。

0

極短...


您可以將Silverlight應用程序添加一個服務引用爲你服務。在已經創建了你的代理。當你這樣做,你就會有在客戶端自動生成代理服務器


您的wcf服務接口必須使用DataContract和OperationContract屬性進行排序,並且與此服務一起使用的POCO類必須具有DataContract和DataMember屬性。


http://msdn.microsoft.com/en-us/library/cc197940(VS.95).aspx

0

我知道這是爲時已晚,以提供一個解決方案,但它是我的問題太多,我發現Portable Class Libraries。這是您的問題的完美解決方案。