2010-12-09 110 views
2

大衛·貝茨介紹他的文章如何不使用「添加服務引用」選項來創建參考WCF: http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2WCF不使用添加服務引用

一旦創建WCF服務,這些都是內部的語句Silverlight的:

BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); 
    EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1003/Person.svc"); 
    IPersonService personService = new ChannelFactory<IPersonService>(basicHttpBinding, endpointAddress).CreateChannel(); 

...

怎樣一個引用Silverlight的WCF中創建的類型(如IPersonService接口),當我不使用「添加服務引用」 T o代理服務器?

回答

2

想法是引用包含Silverlight應用程序WCF數據契約組件,要做到這一點,你需要傻瓜VS所以它認爲組件是SL裝配,他描述了這一在這裏詳細

http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight

和它不是那麼容易,這裏是需要做

什麼只要使用相同的ILDASM /編輯/ ILASM 已經提到告訴 裝配使用適當程序而不是使用Silverlight程序集的 .NET程序集。這是一個非常簡單的過程,它不僅僅是一個替換,而是一個簡單的過程,只需很少的努力就可以很容易地自動完成。它不應該花費很多時間寫一個簡單的 .NET應用程序來爲你做這件事。 它只是一個簡單的.NET到 Silverlight轉換器和驗證器 (用於在Silverlight中測試不支持的組件 )。將該應用程序 放入您的Post Build Events( Visual Studio的前5個最大功能之一!)中,即可完成。不需要特殊的 二進制十六進制值搜索。 所有你正在做的是改變兩個井 記錄的設置(公鑰 令牌和版本)。

第二種解決方案是一個文件級的解決方案,您使用包含您所需要的數據合同,實現以SL,並確保它們只包含類型,允許建立SL和不引用了大量的外部組件文件添加鏈接選項通常WCF服務&數據合同應滿足這些條件。

我可以寫更多,但它會從該鏈接只是複製粘貼

0

您還可以拆分在您所有的方法聲明IPersonService根據異步模式(的BeginXXX/EndXXX)由於Silverlight僅支持asyncronous WCF(即使在後臺線程中)。

爲了做到這一點,您可以添加服務引用,然後將生成的IPersonService(所有方法都將解耦)從Reference.cs中複製。然後你可以刪除參考。

但是,如果您的服務合同經常發生變化,您必須再次重複添加服務程序,並且從此開始,我想說,使用Add-Service-Reference功能更容易,而不是與你的應用服務器。

0

只有一件事我想檢測。通常你需要在你的WCF服務中有更復雜的NET支持的命名空間。因此,您必須有真實原因才能引用您的WCF服務(或服務庫)中的Silverlight子集。 使用如此命名有很多方法傳統方式由添加服務參考。他們在好文章enter link description here中呈現。

相關問題