正如我試圖在標題中描述的那樣,當我添加服務引用時,我沒有得到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;
}
這是確實的(唯一的)的方式來做到這一點?
你添加在VS的服務引用時指定產生異步選擇的方法是什麼?這是VS功能不WCF順便說一句。 – abatishchev
我現在在研究中已經進一步了。由於某些原因,此選項在Silverlight應用程序中似乎灰顯。這似乎是爲什麼我沒有得到方法。想知道是否有辦法強制他們的一代。 – SamiHuutoniemi
也許[this](http://blogs.msdn.com/b/thecrmguys/archive/2012/08/28/silverlight-async-with-visual-studio-2012.aspx)? –