Я пытаюсь вернуть данные из службы 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();
to
var dt = new DataTable("Test");
Я сейчас не получаю никаких ошибок. Но скрипач не получает данные в формате json. Когда я открываю скрипач и вижу данные на вкладке TextView в каком-то странном формате. Это причина того, что я не попадаю в мою нокаут-модель. Как мне исправить это сейчас?