我正在进行一项Silverlight应用程序,我有一个函数需要调用一个Web服务,并使用结果完成其余部分的功能。
我的问题是,通常我会做同步Web服务调用,得到结果并使用它继续执行函数。由于Silverlight不支持同步Web服务调用,除非使用额外的自定义类来模拟它,因此我认为最好按照异步的流程进行,而不是与之抗争。因此,我的问题涉及在程序流程中使用异步调用的最佳设计模式。
在以下示例中,我想根据Web服务调用的返回值使用myFunction TypeId参数。但我不想在调用此函数之前调用Web服务。如何修改我的代码设计以允许异步调用?
感谢您的提前帮助, Mike
我的问题是,通常我会做同步Web服务调用,得到结果并使用它继续执行函数。由于Silverlight不支持同步Web服务调用,除非使用额外的自定义类来模拟它,因此我认为最好按照异步的流程进行,而不是与之抗争。因此,我的问题涉及在程序流程中使用异步调用的最佳设计模式。
在以下示例中,我想根据Web服务调用的返回值使用myFunction TypeId参数。但我不想在调用此函数之前调用Web服务。如何修改我的代码设计以允许异步调用?
string _myPath;
bool myFunction(Guid TypeId)
{
WS_WebService1.WS_WebService1SoapClient proxy = new WS_WebService1.WS_WebService1SoapClient();
proxy.GetPathByTypeIdCompleted += new System.EventHandler<WS_WebService1.GetPathByTypeIdCompleted>(proxy_GetPathByTypeIdCompleted);
proxy.GetPathByTypeIdAsync(TypeId);
// Get return value
if (myPath == "\\Server1")
{
//Use the TypeId parameter in here
}
}
void proxy_GetPathByTypeIdCompleted(object sender, WS_WebService1.GetPathByTypeIdCompletedEventArgs e)
{
string server = e.Result.Server;
myPath = '\\' + server;
}
感谢您的提前帮助, Mike