调用wcf时只有aysnc方法

时间:2015-07-03 20:52:52

标签: web-services wcf windows-phone-8

我正在尝试从Windows phone 8调用WCFService,当我使用WCFTestClient时,它连接并返回数据,但是当我使用添加引用重新启动服务然后尝试访问代码时,只有异步方法在intelesence中显示。我没有将我的方法作为aync进行分类我如何确保我可以访问我的其他方法,因为我调用webservice它是否需要aysnc。

   // Constructor
public MainPage()
{
        InitializeComponent();

        // Sample code to localize the ApplicationBar
        //BuildLocalizedApplicationBar();

      IcuroServiceClient _db = new IcuroServiceClient();
        var json =_db.GetPersonByIdAsync(1);

}

如果是这样我如何将下面简单的方法转换为Aysnc?我习惯了asmx服务,也不熟悉WCF。

    public string GetListByUserId(string userId)
    {

        List<curoList> myList = _db.GetAllListsByUserId(userId);

        var json = JsonConvert.SerializeObject(myList, Newtonsoft.Json.Formatting.None);

        return json;

    }

enter image description here

它在这里为我的伙伴变灰在我的正常签名中我返回一个字符串,但是asyncs看起来不像他们返回的任何东西都是空的。 enter image description here

1 个答案:

答案 0 :(得分:0)

Windows手机基于Silverlight主题的字面和比喻,仅保持所有服务调用异步。这是一个两步过程,人们必须倒退。以下是步骤

  1. 提供回调方法,其工作是以适当的方式处理结果数据或错误。
  2. 然后按照通常的方式进行调用(但调用异步版本)以在单独的线程上启动该进程。
  3. 要知道在回调方法中没有直接加载到GUI,结果是在另一个线程上;请注意,加载到VM属性大部分都是正常的,而对任何GUI订阅绑定的更新将在该线程上完成。

    热解决

    在调用db.GetPersonByIdAsync(1)之前给出的示例中(使用intellisense查找)具有回调的异步订阅方法。

    对于Load,它可能以Begin方法或PersonById调用为前缀。

    在编辑器中,提供方法通常由intellisense完成,其中一个人可以选择一个代码示例。这样就不必根除回调方法的参数。

    可能的例子,说明了如何做到这一点:

    client.GetPersonByIdAsyncCompleted += MyMethodToHandleResultforGetPerson;   // var personId = e.Result;
    client.GetPersonByIdAsync(1); 
    

    为什么

    当设计Silverlight时,在任何线程上等待程序(即使它忙着等待)都会降低浏览器体验。通过要求所有数据库(服务)调用都是异步的,确保开发人员不会使浏览器变慢,尤其是错误代码。松散地说,这个主题延续到了Silverlight作为手机主要操作的窗户电话。

    我花了一段时间才习惯了这个过程,但是现在我已经使用过Silverlight和Windows手机了,我实际上在WPF中使用异步主题,即使我不一定也有,它在数据处理和线程管理。

    对于每个人来说,在同步 hello world 中学习开发人员本身并不容易,但它适合目标平台的需求,一旦学会它就成为第二天性。