2014-10-29 30 views
1

我有一個從Silverlight UI調用的WCF服務。代理在Silverlight的代碼中定義的,看起來像這樣:爲什麼將Silverlight中的WCF代理移動到可移植的類庫中需要實現CreateChannel?

public class MyServiceProxy : ClientBase<IMyService>, IMyService 
{ 
    public IAsyncResult BeginGetId(string name, AsyncCallback callback, object asyncState) 
    { 
     return this.Channel.BeginGetId(name, callback, asyncState); 
    } 

    public int EndGetId(IAsyncResult result) 
    { 
     return this.Channel.EndGetId(result); 
    } 
} 

我現在想從不同的應用程序,它是不是在Silverlight中調用WCF的。我想我會嘗試通過移動它變成一個便攜式類庫其面向.NET 4和Silverlight 5

移動下課後共享代理,接口現在要我重寫CreateChannel:

protected override IMyService CreateChannel() 

我很困惑我應該在這裏提供什麼實現。在PCL中共享代理是一件明智的事情,或者我正在以這種錯誤的方式去做?

回答

1

我知道這個問題現在已經老了,但最近我遇到了這個問題,並且花了我一點時間才找到答案,所以希望這可以幫助某人節省一些時間。

如果您在PCL中定位Silverlight,則ChannelFactory<T>不適用於您,因此您必須在ClientBase<T>上創建自己的CreateChannel()實現。

如果你想避免執行CreateChannel()自己,那麼你只能面向.NET 4.5和Windows 8和/或Windows Phone 8的Silverlight

如果您選擇的Windows Phone 7的Silverlight 7.5,它會自動要求Silverlight 4及更高版本。同樣,如果您選擇Windows Phone Silverlight 8但.NET版本低於4.5,則它將自動需要Silverlight 5.兩者都會強制您爲您提供自己的CreateChannel()實施。

針對Windows Phone 8.1完全刪除ClientBase<T>,因爲System.ServiceModel在Windows Phone 8.1中不可用。