0

データベースからデータを取得する単純な 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";
}
4

2 に答える 2

1

3 つの異なるメソッドを作成してみませんか?

public string serviceForPostcodeString(String postCode)

public XElement serviceForPostcodeXML(String postCode)

public DataSet serviceForPostcodeDataSet(String postCode)

または、常に DataSet を返し、消費者がそれを XML または String に変換できるようにします。

編集

1 つのトリックはジェネリック型を使用することですが、それは Web サービスでは機能しません。ただし、クライアント側で汎用メソッドを使用して Web サービスへの呼び出しをラップすることもできます。このようなもの:

public T serviceForPostcodeWrapped<T>(String postCode)
{
    // ... do some checking for allowed types here ...
    return (T)serviceForPostcode(postCode, typeof(T).Name);
}

免責事項:できると言ったが、すべきではない

于 2012-05-30T14:35:53.917 に答える
0

これを試して:

 [WebMethod]
public string serviceForPostcode(String postCode, String type)
于 2012-05-30T14:28:30.020 に答える