我正在尝试使用silverlight生成WCF方法(SLSVCUTIL)。我有一个返回字符串的WCF服务。但是,我必须使用具有GetStringValueAsync和GetStringValueCompleted的异步方法。但我的调用者期望一个字符串返回值。如何连接这个模式,以便调用者可以调用该方法,它可以返回一个字符串?
假设我有一个按钮,当它被点击时,它会向用户显示一条消息,即服务器的本地时间。通过GetServerTimeAsync()从WCF服务检索消息。
void ShowServerTime_ButtonClick()
{
string result = MyServiceHandler.GetServerTime();
}
public class MyServiceHandler
{
public static string GetServerTime()
{
//method to call is WCFService.GetServerTimeAsync()
//how do I write this so I can return a string value to the caller?
}
}
答案 0 :(得分:0)
我认为您需要设置一个Action委托,以便您可以编写MyServiceHandler.GetServerTime(result => ...)
。我喜欢这样设置:
void ShowServerTime_ButtonClick()
{
MyServiceHandler.GetServerTime(result => {
// do something with "result" here
});
}
public class MyServiceHandler
{
// wire up the handler in the constructor
static MyServiceHandler()
{
WCFService.GetServerTimeCompleted += (sender, args)
{
// assume you're going to pass the callback delegate in the User State:
var handler = args.UserState as Action<string>;
if (handler != null) handler(args.Result);
}
}
public static string GetServerTime(Action<string> callback)
{
// send the callback so that the async handler knows what to do:
WCFService.GetServerTimeAsync(callback)
}
}
当然,既然你正在使用.NET 4.5 / Silverlight 5,那么你可以深入研究async/await stuff,这是一个很好的语法糖(如果你是这样的话)。