我正在尝试从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;
}
它在这里为我的伙伴变灰在我的正常签名中我返回一个字符串,但是asyncs看起来不像他们返回的任何东西都是空的。
答案 0 :(得分:0)
Windows手机基于Silverlight主题的字面和比喻,仅保持所有服务调用异步。这是一个两步过程,人们必须倒退。以下是步骤
要知道在回调方法中没有直接加载到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 中学习开发人员本身并不容易,但它适合目标平台的需求,一旦学会它就成为第二天性。