0

wcf サービスからデータテーブルを返そうとしています。私はサービスを書きました。そのためのコードは以下のとおりです

 [WebInvoke(Method = "PUT", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "TableData")]
    public DataTable GetData(Parameters param)
    {
        try
        {


            var Id = int.Parse(param.Id);
            var tableName = param.TableName;
            var listSelectCol = new ArrayList();
            bool bFirst = true;
            var sSelectColList = new StringBuilder();
            var Query ="";
            var List = from TableEntity in _TableEntityRepository.AsQueryable()
                                  join ColumnEntity in _ColumnEntityRepository.AsQueryable() on TableEntity.Id equals ColumnEntity.Id
                                  where sysTableEntity.TableName.Equals(tableName)
                                  select ColumnEntity.Name;



            foreach (var x in List 
            {
                if (bFirst)
                    bFirst = false;
                else
                    sSelectColList.Append(", ");

                sSelectColList.Append("t." + x.ToString(CultureInfo.InvariantCulture));
                listSelectCol.Add(x.ToString(CultureInfo.InvariantCulture));


            }

                 Query =
                    "select " + sSelectColList + " ,  t.Name as MyName  from  " + tableName +
                    " t   Where t.Id = " + Id;





            var cmdQuery = new SqlCommand(Query, new SqlConnection(ConfigurationManager.AppSettings.Get("connectionString")));
            var sdaQuery = new SqlDataAdapter(cmdQuery);
            var diffTableFrom = new DiffTable();
            var colValues = new DataColumn("ColValues", typeof(System.String));

            var dt = new DataTable();
            dt.Columns.Add(colValues);

            sdaQuery.Fill(dt);

            diffTableFrom.ReturnDiffTable = dt;

            foreach (DataRow row1 in dt.Rows) 
            {
                foreach (string i in listSelectCol)
                {
                    row1["ColValues"] = row1["ColValues"] + row1[i].ToString() + ",";

                }
                row1["ColValues"] = row1["ColValues"].ToString().Remove(row1["ColValues"].ToString().Length - 1);


            }


            return dt;

        }

        catch (Exception e)
        {



            throw new WebFaultException<string>(
        string.Format(
            "{0}{1}",
            e.Message, (e.InnerException != null ? e.InnerException.Message : string.Empty)), HttpStatusCode.BadRequest);
        }


    }

DiffTable のクラスは

  public class DiffTable
    {
        public DataTable ReturnDiffTable {get;set;}
    }

ビューモデルからの呼び出しのコードは

function loadData(id, tablename) {
        debugger;

        var input =
       {

           TableName: tableName,
           Id: id

       };


        return $.ajax({
            url: "../Service/TableData",
            type: "PUT",
            contentType: 'application/json',
            processData: false,
            data: JSON.stringify(input),
            error: function (XMLHttpRequest, textStatus, errorThrown) {

                alert(errorThrown);
            },
           success: function (allData) {
                var mappedData = $.map(allData, function (item) {
                    return new TableChangesDetail(item);

                });

                self.TableChangesDetailList(mappedData);


            }

        });

    }

ajaxを使用してビューモデルからこのサービスを呼び出そうとすると、フィドラーでエラーが発生します[Fiddler] ReadResponse() failed: The server did not return a response for this request.

wcfサービスからデータテーブルを返すにはどうすればよいですか? サービスをデバッグして return dt; にブレークポイントを置くと、それから私は1行を取得します。したがって、データはデータベースから返されますが、ビューモデルには返されません。

ここで何が間違っていますか?

更新1

サービスに書かれたこの行を変更した後

var dt = new DataTable(); 

var dt = new DataTable("Test");

現在、エラーは発生していません。しかし、フィドラーはjson形式でデータを受信して​​いません。フィドラーを開くと、TextViewタブの下にデータがいくつかの形式で表示されます。それが、私がノックアウト モデルに参加できない理由です。これを修正するにはどうすればよいですか?

4

1 に答える 1