2013-07-06 11 views
0

正如我試圖在標題中描述的那樣,當我添加服務引用時,我沒有得到Begin和End方法。我確實得到了GetStudentsAsync()方法,但我希望能夠等待。WCF不會生成開始/結束方法,只有MyMethodAsync版本

界面簡單:

[ServiceContract] 
public interface ISchoolLightService 
{ 
    [OperationContract] 
    ObservableCollection<SLUser> GetStudents(); 

    [OperationContract] 
    ObservableCollection<SLUser> GetTeachers(); 
} 

和GetStudents樣子:

public ObservableCollection<SLUser> GetStudents() 
{ 

     var users = (from u in ent.Users 
        where u.UserType == "Student" 
        select new SLUser 
        { 
         UserID = u.UserID, 
         ... 
        }); 

     return new ObservableCollection<SLUser>(users); 
    } 

客戶端是一個Silverlight 5的項目,而服務器是一個.NET 4.5的類庫。我不應該得到這些方法嗎?

也許值得一提的是,我不得不去解決「始終生成消息合約」和「在引用程序集中重用類型」的問題。

編輯:看在對象瀏覽器,它似乎是方法在那裏,但私人!爲什麼?我如何改變這種行爲?

編輯2:看來更好的問題是「如何在Silverlight項目中啓用基於任務的操作?」。這似乎不可能。該工作圍繞我發現好像是一起的(與其他數據上下文)線的東西:

public static Task<ObservableCollection<Customer>> GetCustomers() 
    { 
     var tcs = new TaskCompletionSource<ObservableCollection<Customer>>(); 

     var client = new CustomerServiceClient(); 

     client.GetCustomersCompleted += (s,e) => 
      { 
       if (e.Error != null) 
        tcs.TrySetException(e.Error); 
       else if (e.Cancelled) 
        tcs.TrySetCanceled(); 
       else 
        tcs.TrySetResult(e.Result); 
      }; 

     client.GetCustomersAsync(); 

     return tcs.Task; 
    } 

這是確實的(唯一的)的方式來做到這一點?

+1

你添加在VS的服務引用時指定產生異步選擇的方法是什麼?這是VS功能不WCF順便說一句。 – abatishchev

+0

我現在在研究中已經進一步了。由於某些原因,此選項在Silverlight應用程序中似乎灰顯。這似乎是爲什麼我沒有得到方法。想知道是否有辦法強制他們的一代。 – SamiHuutoniemi

+0

也許[this](http://blogs.msdn.com/b/thecrmguys/archive/2012/08/28/silverlight-async-with-visual-studio-2012.aspx)? –

回答

0

嘗試使用的BeginInvoke

首先定義一個委託

public delegate ObservableCollection<SLUser> GetStudentsAsync(); 

,並呼籲

GetStudentsAsync del = new GetStudentsAsync(GetStudents); 
del.BeginInvoke(params, callback, object); // use input parameters if needed/ 
+0

我想要做的就是這樣的: var result =任務<...> .Factory.FromAsync(service.BeginGetStudents,service.EndGetStudents); – SamiHuutoniemi