在设计后端系统时,您通常会为您的故事和任务提供什么样的粒度?
创建故事和任务的大多数示例通常以GUI应用程序为中心,故事是用户可以做的事情(例如,通过ISBN搜索书籍),每个任务都围绕启用此GUI功能.
在设计后端系统时,即没有用户界面但只是一堆服务与数据库,中间件等交谈的系统,您如何设计任务和故事?
我正在尝试在我的.NET客户端和服务器之间进行缓存.在WinInet决定缓存结果之前,我看到一个看似随机的端点命中数.
.NET客户端使用HttpWebRequest以下命令发出请求
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uiTextBoxUrl.Text);
var policy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable);
webRequest.CachePolicy = policy;
WebResponse webResponse = webRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)
使用ASP.net Web API实现的服务器设置以下CacheControl标头:
response.Headers.CacheControl = new CacheControlHeaderValue
{
MaxAge =3600,
MustRevalidate = true,
Public = true,
Private = true
};
Run Code Online (Sandbox Code Playgroud)
使用带有将请求发送到端点的按钮的测试工具,我可以看到,即使CacheIfAvailable使用了,也不会立即缓存响应.通过检查我的服务器上的调试输出,我发现在最终缓存请求之前需要触发看似随机数量的命中(或者更有可能是命中计数/经过时间启发式).如果我快速敲击测试按钮,它将在大约10次点击后开始缓存.如果我每隔1或2秒点击一次按钮,我就会计算最多25次点击,然后再进行缓存.
这是我从Fiddler看到的回应:
HTTP/200 responses are cacheable by default, unless Expires, Pragma, or Cache-Control headers are present and forbid caching.
HTTP/1.1 Cache-Control Header is present: …Run Code Online (Sandbox Code Playgroud) Splunk最佳实践说使用键/值对.它还表示如果值包含空格,则将值包装在引号中.所以,假设我有一个原始值Fred Smith:
my_key=name my_value="Fred Smith"
Run Code Online (Sandbox Code Playgroud)
没关系,我已经添加了引号.但是,如果我有一个原始值" Fred Smith"(注意已经存在的引号和开头存在空格)怎么办- 这会产生:
my_key=name my_value="" Fred Smith""
Run Code Online (Sandbox Code Playgroud)
这将被视为:
my_key=name my_value=""
my_key=Fred my_value=Smith""
Run Code Online (Sandbox Code Playgroud)
在Splunk值中转义引号的最佳做法是什么?
我刚刚遇到一些覆盖ToString()并返回一些关键信息(不仅仅是调试信息)的代码.此类用户调用ToString()并解析该关键数据.
我的意见,从多年来阅读各种各样的点点滴滴,是ToString()有一个相当弱的contract,即覆盖它(如果你想)显示一些有意义的东西.
看到我说那里的显示器?我遇到的代码依赖于此类实例的文本表示非常具体; 添加除预期之外的任何东西都会导致各种各样的问题.
所以,我的问题是,如果一个对象的文本表示是关键的,应该ToString()使用还是应该使用更明确的方法/属性,例如AsText?
阅读很多关于3个成语之间差异的帖子.但是更加困惑,然后我遇到了这篇文章:http: //martinfowler.com/articles/injection.html
只是想看看我是否做对了.如果我错了,请纠正我.请通知我更正和补充:
IoC-是将应用程序与其使用的服务的实现分离的概念.该应用程序包含对Iservice的引用,并不具备实现具体服务的能力.
至少有两种方法可以实现:
DI - 具体服务作为ctor param注入/抛出一个setter/throw接口注入(后者是什么意思?)
ServiceLocator - 是一个知道应用程序可能需要的所有具体服务的组件.应用程序明确要求定位器提供具体服务.
*IoC容器实际上是控件的工厂("提供者").
我对文章中的"何时更喜欢(1)或(2)"部分感到有些困惑.有人可以用外行的话说出自己的经历吗?
"服务定位器由于其更直接的行为而略有优势.但是,如果要构建要在多个应用程序中使用的类,那么依赖注入是更好的选择." - >定位器如何更直接?因为它显式使用方法调用?当有多个应用程序时,使用DI有什么好处?
dependency-injection ioc-container inversion-of-control service-locator
我希望TeamCity运行我的mSpec测试并报告测试所涵盖的代码.
如果某些命名空间中的代码覆盖率不满足阈值(例如,MyProduct.ImportantStuff必须是100%,但MyProduct.LegacyStuff必须是[ 23% 或当前为确保我们不添加新内容的任何内容],我还希望TeamCity报告构建失败没有覆盖测试的东西 ].
我最初看了dotCover,因为它已集成到TeamCity中.我一直在关注OpenCover,因为我无法让TC在低覆盖率上失败.
我得到了OpenCover的工作但我仍然想知道(因为我相信很多人会这样做)如果代码覆盖率太低,如何让TC失败.
我想在POST某个地方使用RestSharp .我直接发布JSON(而不是POCO).因为我发布了普通的JSON,我相信我需要使用这种解决方法而不是设置Body:
request.AddParameter(
"application/json", myJsonString, ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)
当我没有压缩JSON时,这很好用.当我这样做时,使用这个:
request.Headers.Add("Content-Encoding", "gzip");
request.AddParameter(
"application/json",
GZipStream.CompressString(myJsonString),
ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)
这不起作用.我逐步完成了代码RestClient::ConfigureHttp,我看到了:
http.RequestBody = body.Value.ToString();
Run Code Online (Sandbox Code Playgroud)
因为我给出了一个字节数组,body.Value所以设置为System.Byte[]
有没有办法让RestSharp在POST请求中处理gzip压缩的json字符串?
我正在编写一个应用程序来学习TypeScript.它在Chrome中运行良好,但在Edge中运行时遇到问题.我有这个方法:
set position(pos: Point) {
const diffAsPoint = pos.minus(this.canvasPos);
let diff: Vector2D = diffAsPoint.toVector2D(); // <--- this line
if (diff instanceof Vector2D) {
console.info("is a vector!");
} else {
console.info("not a vector!");
}
Run Code Online (Sandbox Code Playgroud)
我看到的是,有时,DIFF是一个Vector2D而不是作为一个实例一个Vector2D.显然,当发生这种情况时,对它的任何操作都会导致aObject doesn't support property or method ...
方法toVector2D很简单:
toVector2D(): Vector2D {
return new Vector2D(this.x, this.y);
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有所作为,但这里有一些背景知识:
该应用程序是一个游戏循环运行的游戏(每秒60帧 - 使用window.requestAnimationFrame(() => this.animloop());)
该应用在Chrome中正常运行
它在IE中运行不正常(它看起来像一个不同的问题,但我还没有看到IE和调试工具在调查时崩溃)
它使用最新的TypeScript(2.2.1)
它似乎发生在启动后的一个随机点,有时是2秒,有时是3秒
在代码中还有其他地方发生这种情况,所有这些都与Point和Vector2D在每一帧中创建它们有关(如果我引入一个字段而不是每帧创建一个字段,一些问题就会消失)
我正在使用AMD和requirejs
更新-------
使用Edge和调试工具并设置"始终从服务器刷新",从网站(http://pacmanweb.azurewebsites.net/)加载时,我可以看到游戏 …
是否有可能使用 gRPC 作为具有扇出功能的推送服务?在Google给出的示例中,服务器端(C#)有以下代码:
public override async Task ListFeatures(Rectangle request, IServerStreamWriter<Feature> responseStream, ServerCallContext context)
{
var responses = features.FindAll( (feature) => feature.Exists() && request.Contains(feature.Location) );
foreach (var response in responses)
{
await responseStream.WriteAsync(response);
}
}
Run Code Online (Sandbox Code Playgroud)
问题就在这里:
我想我需要的是:
编辑: 根据卡尔的建议,我现在有以下内容:
原型:
service PubSub {
rpc Subscribe(Subscription) returns (stream Event) {}
rpc Unsubscribe(Subscription) returns (Unsubscription) {}
}
message Event
{
string Value = 1;
}
message Subscription
{
string Id = 1;
}
message Unsubscription
{
string …Run Code Online (Sandbox Code Playgroud) 我们有一个使用基于HTTP API .NET应用程序,我们POST的请求向第三方HTTP端点(这不是我们的控制之下)和它在上,我们给它一个HTTP终结以后叫我们回 ; 就像是:
WebRequest request = WebRequest.Create(urlToMethod);
request.Method = @"POST";
request.Headers.Add(@"Callback", "http://ourserver?id="+id );
Run Code Online (Sandbox Code Playgroud)
我们成千上万的这些调用,所以我们希望尽可能有效(在速度/内存/线程等方面)
就回调代码而言,我们有一个充当监听器的类型; 这就是我们启动它的方式:
_httpListener = new HttpListener();
_httpListener.Prefixes.Add(ourServer);
_httpListener.Start();
_httpListener.BeginGetContext(callback, null);
Run Code Online (Sandbox Code Playgroud)
当服务器回调我们时,它会触及我们的callback方法,如下所示:
HttpListenerContext context = _httpListener.EndGetContext(result);
HttpListenerResponse httpListenerResponse = context.Response;
httpListenerResponse.StatusCode = 200;
httpListenerResponse.ContentLength64 = _acknowledgementBytes.Length;
var output = httpListenerResponse.OutputStream;
output.Write(_acknowledgementBytes, 0, _acknowledgementBytes.Length);
context.Response.Close();
var handler = ResponseReceived;
if (handler != null)
{
handler(this, someData);
}
Run Code Online (Sandbox Code Playgroud)
因此,我们有一个这个侦听器的实例(_which内部使用HttpListener),并且对于它获得的每个响应,它都会通知ResponseReceived事件中的所有订阅者.
订阅者(可能是数百个)只关心与其特定关联的数据id …
.net ×4
c# ×2
http ×2
agile ×1
api ×1
asynchronous ×1
dotcover ×1
grpc ×1
html5-canvas ×1
http-caching ×1
httplistener ×1
javascript ×1
opencover ×1
rest ×1
restsharp ×1
splunk ×1
teamcity ×1
typescript ×1
wininet ×1