È necessario passare i parametri come Xml alle stored procedure.Passaggio dei parametri come Xml a una stored procedure
Ho un servizio WCF nel livello intermedio che effettua chiamate al mio livello dati che a sua volta inoltra la richiesta alla stored procedure appropriata.
Il progetto è che il servizio WCF è responsabile della creazione dell'XML da passare al repository.
Mi chiedo se mantenere il controllo di quali parametri sono contenuti nell'Xml nel livello intermedio o utilizzare un dizionario creato dal client che poi convertirò in Xml nel livello intermedio?
Al momento io sono andato per la seconda - per esempio:
public TestQueryResponseMessage TestQuery(TestQueryRequestMessage message)
{
var result = Repository.ExecuteQuery("TestQuery", ParamsToXml(message.Body.Params));
return new TestQueryResponseMessage
{
Body = new TestQueryResponse
{
TopicItems = result;
}
}
}
private string ParamsToXml(Dictionary<string, string> nvc)
{
//TODO: Refactor
StringBuilder sb = new StringBuilder();
sb.Append("<params>");
foreach (KeyValuePair<string, string> param in nvc)
{
sb.Append("<param>");
sb.Append("<" + param.Key + ">");
sb.Append(param.Value);
sb.Append("</" + param.Key + ">");
sb.Append("</param>");
}
sb.Append("</params>");
return sb.ToString();
}
Tuttavia potrei avere bisogno di farlo nel primo modo. Per esempio.
public TestQueryResponseMessage TestQuery(TestQueryRequestMessage message)
{
string xml = string.Format("<params><TestParameter>{0}</TestParameter></params>",message.Body.TestParameter)
var result = Repository.ExecuteQuery("TestQuery", xml);
return new TestQueryResponseMessage
{
Body = new TestQueryResponse
{
TopicItems = result;
}
}
}
Cosa consiglia il hivemind?
Le cose come string.Format non sono adatte alla creazione di xml, in quanto vi sono regole di escape complesse che devono essere seguite. XmlWriter sarebbe un'alternativa ragionevole per il caso del dizionario, ma considera l'oggetto orientato all'approccio discusso di seguito. –