1

次の webservice メソッドがあります。localhost でサービス リファレンス ページをテストすると正常に動作し、データを含む Xml ファイルが返されます。このメソッドは、2 つの配列の構造体を返します。C# クライアントを作成しようとしていますが、データの抽出に困難があります。これが私のコードです。

 public struct GetWeatherItemDataStruct
   {
        //public DateTime[] TimeStamp;
        public double[] Value;
        public string[] TimeStamp;
   }

[WebMethod]
public GetWeatherItemDataStruct GetWeatherItemData(string parameterName,string fromTime,string toTime)
{
    GetWeatherItemDataStruct gwiDataStructObj = new GetWeatherItemDataStruct();
    SqlConnection conn  = null;
    SqlDataReader rdr   = null;
    int prameterID      = GetParameterID(parameterName);
    int tblSize         = GetTableSize(parameterName, fromTime, toTime, prameterID);
    double[] result     = new double[tblSize];
    int i = 0;
    string[] tStamp     = new string[tblSize];
    String source       = "Data Source=MASTER-PC\\SQLEXPRESS;Initial Catalog=WeatherDatabase;Integrated Security=True";
    try
    {
        using (conn = new SqlConnection(source))// create and open a connection object
        {                         
            // 1. create a command object identifying
            // the stored procedure
            SqlCommand cmd  = new SqlCommand("GetWeatherItemData", conn);                
            // 2. set the command object so it knows
            // to execute a stored procedure
            cmd.CommandType = CommandType.StoredProcedure;
            // 3. add parameter to command, which
            // will be passed to the stored procedure
            //cmd.Parameters.Add(new SqlParameter("@WeatherParameterID", "1"));
            cmd.Parameters.Add("@WeatherParameter", SqlDbType.VarChar).Value    = parameterName;
            cmd.Parameters.Add("@FromTimeStamp", SqlDbType.VarChar).Value       = fromTime;
            cmd.Parameters.Add("@ToTimeStamp", SqlDbType.VarChar).Value         = toTime;
            conn.Open();
            // execute the command
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                result[i]   =   (double)rdr["MeasurementValue"];
                tStamp[i]   =   rdr["Recieved"].ToString();
                i++;                   
            }
            gwiDataStructObj.Value      = result;
            gwiDataStructObj.TimeStamp  = tStamp;
        }
    }
    catch (SqlException e)
    {
        //Log exception
        //Display Error message
    }
    return gwiDataStructObj;
}

このメソッドからどのように読み取るのですか?クライアントの作成方法がよくわかりません。これまでのところ、次のように書いています。

 var client = new WebServiceSample.WebService1SoapClient();
        string paramName = "Windsensor";
        string dtFrom="2012-10-04 19:05:57:190";
        string dtTo="2012-10-05 21:50:05:197";
        int paramID = 0;
        double[] paramValue;
        double[] paramValue;
        double[] tStamp;
        double i;

        paramValue = client.GetWeatherItemData(paramName, dtFrom, dtTo).Value;
        tStamp =client.GetWeatherItemData(paramName, dtFrom, dtTo).TimeStamp;

私の問題は、次の2行です。

paramValue = client.GetWeatherItemData(paramName, dtFrom, dtTo).Value;
tStamp =client.GetWeatherItemData(paramName, dtFrom, dtTo).TimeStamp;

というエラーが表示されます: SoapWebServiceClient.WebServiceSample.ArrayOfDouble を double[] に暗黙的に変換できません

SoapWebServiceClient.WebServiceSample.ArrayOfString を string[] に暗黙的に変換することはできません

4

0 に答える 0