Я пытаюсь написать операцию для вызова WebService, проанализировать XML-запрос и вернуть результаты как OutArguement. Я поражен попыткой доступа к CodeActivityContext из OpenReadCompletedEventHandler, который я настроил для анализа XML. Пожалуйста, см. Ниже, что я пытаюсь выполнить, особенно когда я пытаюсь получить доступ к контексту активности (this.OutputType.Set (context, myCollection)) и позвольте мне, можно ли это сделать и как правильно настроить. Большое спасибо за вашу помощь.Workflow Activity для вызова webservice, parse xml response и возвращаемого значения
[CategoryAttribute("Out Arguments")]
public OutArgument<List<string>> OutputType { get; set; }
protected override void Execute(CodeActivityContext context)
{
Uri svcUri = new Uri(@"http://path/to/webservice");
WebClient svc = new WebClient();
svc.OpenReadCompleted += new OpenReadCompletedEventHandler(svc_OpenReadCompleted);
svc.OpenReadAsync(svcUri);
}
void svc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
Stream responseStream = e.Result;
parametersXml = XDocument.Load(responseStream);
// linq to xml to pull out each of the parameter tags and their descendants
var parameters = from item in parametersXml.Descendants("parameter")
select new myParameter
{
name = item.Element("name").Value,
description = item.Element("description").Value,
defaultValue = item.Element("defaultValue").Value,
optionsType = item.Element("optionsType").Value,
type = item.Element("type").Value,
options = (from ops in item.Descendants("options").Elements()
select new
{
Key = (string)ops.Element("value").Value,
Value = ops.Element("displayAlias") != null
? (string)ops.Element("displayAlias").Value
: ""
}).ToDictionary(pair => pair.Key, pair => pair.Value)
};
foreach (myParameter i in parameters)
{
if (i.name == "DATA_TO_DOWNLOAD")
{
foreach (string optionKey in i.options.Keys)
{
myCollection.Add(optionKey);
}
}
this.OutputType.Set(context, myCollection);
}
}
else
{
}
}