Причина в том, что те комбинации года / статуса, которые должны были бы создавать записи с values: 0
, не существуют в исходных данных. d3 только повторяет существующих комбинаций ...
Таким образом, вам придется заполнить пробелы своим собственным кодом. Это можно сделать разными способами. Один из них состоит в цепочке .map
, которая добавляет пропущенную запись values
при необходимости:
d3.csv("https://raw.githubusercontent.com/benubah/rconsortium_projects/master/test.csv")
.then(function(data) {
var stat = d3.nest()
.key(d => d.Year)
.key(d => d.Status)
.rollup(v => v.length)
.entries(data)
.map(function (obj) {
if (obj.values.length === 1) {
if (obj.values[0].key == "Completed") {
obj.values.unshift({ key: "InProgress", values: 0 });
} else {
obj.values.push({ key: "Completed", values: 0 });
}
}
return obj;
});
console.log(stat);
});
<script src="https://d3js.org/d3.v5.js"></script>
Я решил его!
Похож по умолчанию на приложение Silverlight, отправлял все cookie браузеров службе. Один из этих cookie является ".ASPXAUTH" cookie для аутентификации против членства и ролей.
Приложение asp.net однако не отправляло cookie службе. Для отправки cookie авторизации, я использовал следующий код прежде, чем назвать мой метод веб-сервиса.
using (OperationContextScope scope = new OperationContextScope(ws.InnerChannel))
{
HttpRequestMessageProperty httpRequest = new HttpRequestMessageProperty();
OperationContext.Current.OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, httpRequest);
HttpCookieCollection cc = Page.Request.Cookies;
if (Request.Cookies[".ASPXAUTH"] != null)
{
HttpCookie aCookie = Request.Cookies[".ASPXAUTH"];
String authcookieValue = Server.HtmlEncode(aCookie.Value);
httpRequest.Headers.Add("Cookie: " + ".ASPXAUTH=" + authcookieValue);
}
// Webservice call goes here
}
Не уверенный, как это работает от Silverlight, но не ASP.NET, но для начинающих вот, хорошее сообщение в блоге о том, как установить WCF для работы с поставщиками членства ASP.NET. Существует довольно много шагов, таким образом, это могло быть довольно легко пропустить установку.
После того как Вы получаете ту работу правильно затем, я предполагаю, что оба должны работать правильно.
Вместо HTTPContext пробуют ServiceSecurityContext. Текущий. PrimaryIdentity
Я думаю, что это может быть, потому что мой wcf сервис находится в моем silverlight.web проекте, и возможно они более дружелюбны когда дело доходит до совместного использования.
Я, возможно, должен читать больше на wcf и создать большее разделение проблем путем установки отдельного проекта веб-сервиса?
Обновление:
Хорошо я смотрел на запрос Сообщения HTTP с помощью Скрипача
Похож на Приложение Silverlight, отправляет 'состояние' с cookie авторизации, и мое приложение asp.net не.
Похож я должен отправить состояние + мой cookie авторизации, когда я называю сервис. Я, возможно, должен сформулировать новый вопрос скоро...