Недавно я работал над интеграцией Windows Phone для sharepoint. Я использовал для связи веб-сервисы, предоставляемые sharepoint.
Форма там я узнал, что Windows Phone поддерживает только асинхронные звонки на веб-сервисы,
который начинает выполнять оставшуюся строку кода, и как только я получу ответ, он начнет выполнять его. Но в этом случае предположим, что моя логика зависит от ответа веб-службы, тогда для меня бесполезно вызывать асинхронный вызов веб-службы. Мне нужно написать всю логику в openreadcompleted или такого рода событиях и т. Д.
Это работает не во всех сценариях, поэтому я создал имя класса CustomTask для связи, и код приведен ниже:
MainClass
{
foreach (Task t in tasks)
{
CustomTask objCustomTask = new CustomTask();
objCustomTask.IsTaskCompleted += new EventHandler<CustomEventArgs>(objCustomTask_IsTaskCompleted);
objCustomTask.sortTasks(t.ID, t);
}
}
public class CustomTask
{
public event System.EventHandler<CustomEventArgs> IsTaskCompleted;
CustomEventArgs objCustomEventArgs = new CustomEventArgs();
WorkflowService.WorkflowSoapClient ws = new WorkflowService.WorkflowSoapClient();
public void sortTasks(String id, Task t)
{
objCustomEventArgs.objTask = t;
ws.CookieContainer = Login.cookieJar;
ws.GetWorkflowDataForItemAsync("TaskName");
ws.GetWorkflowDataForItemCompleted += new EventHandler<WorkflowService.GetWorkflowDataForItemCompletedEventArgs>(ws_GetWorkflowDataForItemCompleted);
}
void ws_GetWorkflowDataForItemCompleted(object sender, WorkflowService.GetWorkflowDataForItemCompletedEventArgs e)
{
objCustomEventArgs.IsPendingTask = false;
XElement objxelement = e.Result;
IEnumerable<XElement> objXElementColl = objxelement.Descendants(XName.Get("ActiveWorkflowsData", Constant.strWorkflowList));
foreach (XElement objXElementWorkflowTemplate in objXElementColl)
{
XElement objXElementWorkflows = objXElementWorkflowTemplate.Element(XName.Get("Workflows", Constant.strWorkflowList));
if (objXElementWorkflows != null && objXElementWorkflows.HasElements == false)
{
objCustomEventArgs.IsPendingTask = true;
}
}
IsTaskCompleted(sender, objCustomEventArgs);
}
public List<Task> GetPendingTask()
{
return null;
}
}
Моя работа выполнена, но у меня есть несколько вопросов:
Метод, который я использовал, повлияет на производительность приложения?
означает ли асинхронный вызов, что мы не можем реализовать трехуровневую архитектуру?
Почему синхронные вызовы не поддерживаются.