【发布时间】:2010-10-19 09:14:12
【问题描述】:
我需要将参数作为 Xml 传递给我的存储过程。
我在中间层有一个 WCF 服务,它调用我的数据层,然后将请求转发到适当的存储过程。
设计是WCF服务负责构建Xml传递给Repository。
我只是想知道是要控制中间层的 Xml 中包含哪些参数,还是使用客户端构建的字典,然后我将其转换为中间层的 Xml?
目前我选择了后者——例如:
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();
}
但是我可能需要第一种方式。例如
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;
}
}
}
主脑推荐什么?
【问题讨论】:
-
string.Format 之类的东西不适合创建 xml,因为必须遵循复杂的转义规则。 XmlWriter 将是 Dictionary 案例的合理替代方案,但请考虑下面讨论的面向对象方法。