J'ai besoin de passer des paramètres en Xml à mes procédures stockées.Passage de paramètres en XML à une procédure stockée
J'ai un service WCF dans le niveau intermédiaire qui effectue des appels à ma couche de données qui à son tour transmet la demande à la procédure stockée appropriée.
La conception est que le service WCF est responsable de la construction du fichier XML à transmettre au référentiel. Je me demande simplement si je dois garder le contrôle des paramètres contenus dans le Xml dans le niveau intermédiaire ou utiliser un dictionnaire construit par le client que je convertis ensuite en Xml dans le niveau intermédiaire?
Au moment où je suis allé pour ce dernier - par exemple:
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();
}
Cependant, je pourrais avoir besoin de faire de la première manière. Par exemple.
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;
}
}
}
Que recommande le hivemind?
Des choses comme string.Format ne sont pas adaptés à la création de xml, car il y a des règles complexes s'échappant qui doivent être suivies. XmlWriter serait une alternative raisonnable pour le cas du dictionnaire, mais considérons que l'objet orienté est discuté ci-dessous. –