消费WCF服务的差异 - 控制台与Silverlight

时间:2010-07-18 19:08:27

标签: c# wcf-client

当我有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中我必须使用生成异步操作...:/

2 个答案:

答案 0 :(得分:2)

同步调用将停止Silverlight UI线程以及可能的执行环境,即浏览器。为防止这种情况,只允许异步调用。

当然这首先是不寻常的,但从长远来看,将视图和服务层分离实际上是有帮助的。

答案 1 :(得分:1)

Silverlight不支持同步调用(这是您在控制台应用程序中执行的操作)。

更新: http://forums.silverlight.net/forums/p/34531/104526.aspx“主要的一点是,由于所有浏览器都不支持同步行为,因此似乎已将其删除。”