Я пытаюсь написать действие для вызова WebService, разобрать ответ xml и вернуть результаты как OutArguement.Я поражен, пытаясь получить доступ к CodeActivityContext из OpenReadCompletedEventHandler, который я настроил для анализа xml.Ниже приведено описание того, что я пытаюсь выполнить, в частности, где я пытаюсь получить доступ к контексту активности (this.OutputType.Set (context, myCollection)), и дайте мне знать, можно ли это сделать и как правильно настроить.Большое спасибо за вашу помощь.
[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
{
}
}