当我有wcf合同时,有人可以告诉我为什么:
[ServiceContract]
public interface IService1
{
[OperationContract]
string TestGetName();
}
和实施
public string TestGetName()
{
return "Kasia";
}
当我尝试在Console应用程序中使用它时,我可以这样做:
Service1Client client = new Service1Client();
Console.WriteLine((client.TestGetName()));
但在Silverlight中我必须使用这种方式:
Service1Client clientTest = new Service1Client();
clientTest.TestGetNameCompleted += new EventHandler<TestGetNameCompletedEventArgs>(clientTest_TestGetNameCompleted);
clientTest.TestGetNameAsync();
void clientTest_TestGetNameCompleted(object sender, TestGetNameCompletedEventArgs e)
{
this.dataGridChild.DataContext = e.Result;
}
为什么在SL中我没有看到这个第一个简短的解决方案,但只有这个与事件处理程序? 或者更好......为什么在Console应用程序中我可以选择同步操作生成而在SL中我必须使用生成异步操作...:/
答案 0 :(得分:2)
同步调用将停止Silverlight UI线程以及可能的执行环境,即浏览器。为防止这种情况,只允许异步调用。
当然这首先是不寻常的,但从长远来看,将视图和服务层分离实际上是有帮助的。
答案 1 :(得分:1)
Silverlight不支持同步调用(这是您在控制台应用程序中执行的操作)。
更新: http://forums.silverlight.net/forums/p/34531/104526.aspx“主要的一点是,由于所有浏览器都不支持同步行为,因此似乎已将其删除。”