2011-10-11 56 views
0

我們一直在使用Microsoft Sync Framework和WCF開發集線器/分支同步模型,並且由於我們正在開發客戶端和服務器,因此我們希望將WCF服務契約接口轉換爲共享程序集,以便我們只需定義一次並在客戶端和服務器之間共享。大多數情況下,這可以工作,但Sync Framework的GetSchema方法傳遞一個表名的Collection對象,該對象被序列化並在客戶端讀取爲string []。但是,由於客戶端代理已被寫入使用服務器接口,因此它期望收到一個Collection對象,並且我得到的類型不匹配。在共享WCF接口的客戶端上處理集合<string>

我只是將合同更改爲僅顯式傳遞字符串[],並在調用同步提供程序方法時手動進行轉換,但這會導致發現「模糊匹配」錯誤。

如何在客戶端和服務器上使用相同的接口並正確處理Collection - > string []序列化?

回答

1

我解決了這個使用上是在給代理通過Collection<string>ToArray() LINQ分機呼叫:

public override SyncSchema GetSchema(System.Collections.ObjectModel.Collection<string> tableNames, SyncSession syncSession) 
{ 
    return this.ServiceProxy.GetSchema(tableNames.ToArray(), syncSession); 
} 

服務器上的合同中規定的IEnumerable<string>而不是Collection<string>的。

public SyncSchema GetSchema(IEnumerable<string> tableNames, SyncSession syncSession) 
{ 
    // Convert IEnumerable<string> to Collection<string> 
    Collection<string> tables = new Collection<string>(tableNames.ToList()); 
    return this.syncProvider.GetSchema(tables, syncSession); 
}