我有一个简单的Web服务,可以从数据库中获取数据,我希望将这些数据作为数据集,字符串,XML返回。但是web服务xml没有得到我返回的类型。问题是,是否可以作为对象和Web服务XML返回以显示正确的标记。目前它显示此标签anytype而不是字符串,例如。
这是方法
[WebMethod]
public Object serviceForPostcode(String postCode, String type)
{
/**
*
* create dataset to store query
* convert dataset to required return type
* create types for returned object
*
*
**/
SqlDataAdapter adapter = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(dbConnection());
/**
*
* -- types--
*
**/
XmlDocument xmlD = new XmlDocument();
StringWriter sw = new StringWriter();
DataSet dataSet = new DataSet();
/**
*
*
**/
// connection and query string
string dbQuery = "SELECT id, address1, address2, address3, address4, address5, post_code, country FROM paf WHERE (post_code = @postCode)";
try
{
cmd.Parameters.Add(new SqlParameter("@postcode",SqlDbType.NChar, 10)).Value = postCode.ToUpper();
cmd.CommandText = (dbQuery);
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
adapter.SelectCommand = cmd;
adapter.Fill(dataSet,"post codes");
}
catch(Exception e)
{
System.Web.HttpContext.Current.Response.Write(e.Message);
}
finally
{
//close database connection
conn.Close();
}
if (type.Equals("xml", StringComparison.InvariantCultureIgnoreCase))
{
return dataSet.GetXml();
}
else if (type.Equals("string", StringComparison.InvariantCultureIgnoreCase))
{
dataSet.WriteXml(sw);
return sw.ToString();
}
else if(type.Equals("dataset",StringComparison.InvariantCultureIgnoreCase))
{
return "";
}
return "error";
}
答案 0 :(得分:1)
为什么不创建三种不同的方法?
public string serviceForPostcodeString(String postCode)
public XElement serviceForPostcodeXML(String postCode)
public DataSet serviceForPostcodeDataSet(String postCode)
或者始终返回一个DataSet,让使用者将其转换为XML或String。
编辑
一个技巧是使用泛型类型,但这不适用于Web服务。但是您也可以在客户端使用通用方法将您的调用包装到Web服务。像这样:
public T serviceForPostcodeWrapped<T>(String postCode)
{
// ... do some checking for allowed types here ...
return (T)serviceForPostcode(postCode, typeof(T).Name);
}
免责声明:我说你可以,而不是你应该
答案 1 :(得分:0)
试试这个:
[WebMethod]
public string serviceForPostcode(String postCode, String type)