我在我创建的Web API中进行了以下操作:
// GET api/<controller>
[HttpGet]
[Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")]
public CartTotalsDTO GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false)
{
return delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh);
}
Run Code Online (Sandbox Code Playgroud)
对此Web服务的调用是通过以下方式通过Jquery Ajax调用完成的:
$.ajax({
url: "/api/products/pharmacies/<%# Farmacia.PrimaryKeyId.Value.ToString() %>/page/" + vm.currentPage() + "/" + filter,
type: "GET",
dataType: "json",
success: function (result) {
vm.items([]);
var data = result.Products;
vm.totalUnits(result.TotalUnits);
}
});
Run Code Online (Sandbox Code Playgroud)
我见过一些以这种方式实现上一个操作的开发人员:
// GET api/<controller>
[HttpGet]
[Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")]
public async Task<CartTotalsDTO> GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false)
{
return …Run Code Online (Sandbox Code Playgroud) 我有一个我想要模拟的对象(比如HttpContext或其他).有时,有一些单元测试,我被迫嘲笑大量的依赖项,并适当地设置它们的依赖项和值.
下面是一些示例代码来模拟httpcontext和另一个类:
public static HttpContextBase FakeHttpContext()
{
var context = new Mock<HttpContextBase>();
var files = new Mock<HttpFileCollectionBase>();
var request = new Mock<HttpRequestBase>();
var response = new Mock<HttpResponseBase>();
var session = new Mock<HttpSessionStateBase>();
var server = new Mock<HttpServerUtilityBase>();
var user = new Mock<IPrincipal>();
var identity = new Mock<IIdentity>();
request.Setup(req => req.ApplicationPath).Returns("~/");
request.Setup(req => req.AppRelativeCurrentExecutionFilePath).Returns("~/");
request.Setup(req => req.PathInfo).Returns(string.Empty);
request.Setup(req => req.Form).Returns(new NameValueCollection());
request.Setup(req => req.QueryString).Returns(new NameValueCollection());
request.Setup(req => req.Files).Returns(files.Object);
response.Setup(res => res.ApplyAppPathModifier(MoqIt.IsAny<string>())).
Returns((string virtualPath) => virtualPath);
user.Setup(usr => usr.Identity).Returns(identity.Object);
identity.SetupGet(ident => ident.IsAuthenticated).Returns(true); …Run Code Online (Sandbox Code Playgroud) 我正在尝试在A*算法上实现缓存路径列表.目前,缓存的路径存储在如下列表中:
readonly List<CachedPath> _cachedPaths = new List<CachedPath>();
Run Code Online (Sandbox Code Playgroud)
在此列表上执行的操作是:
FirstOrDefault获取满足某些条件的元素
var cached = _cachedPaths.FirstOrDefault(p => p.From == from && p.To == target && p.Actor == self);
Run Code Online (Sandbox Code Playgroud)
删除和元素
_cachedPaths.Remove(cached);
Run Code Online (Sandbox Code Playgroud)
附加
_cachedPaths.Add(new CachedPath {
From = from,
To = target,
Actor = self,
Result = pb,
Tick = _world.WorldTick
});
Run Code Online (Sandbox Code Playgroud)
注意:类CachedPath只有From,To和Actor覆盖GetHashCode和Equals,因此具有这些相同属性的两个实例具有相同的散列和相等性.
鉴于快速查找(包含),'HashSet'中的插入和删除是O(1)(如果我没有记错),我考虑使用'HashSet'来执行这些操作.唯一的问题是FirstOrDefault,我必须枚举整个集合才能得到它.
鉴于此问题,我还考虑使用由From,To和Actor的哈希索引的Dictionary:
Dictionary<int, CachedPath> cachedPath
Run Code Online (Sandbox Code Playgroud)
再一次,如果我没有弄错的话,Dictionary还提供O(1)插入,删除和Key检索.这使我认为Dictionary是HashSet + O(1)元素检索功能.
我错过了什么吗?在它支持更多操作的意义上,字典真的比HashSet好吗?
提前致谢.
我正在尝试使用Windows 7上的IIS 7.5从Visual Studio 2013调试ASP.NET Web应用程序.调试过程非常慢,每页加载大约需要60-90秒.我注意到,当一个页面加载时,MSVSMON.EXE(Visual Studio远程调试监视器)在我的四核机器上保持25-30%的CPU,我怀疑它是罪魁祸首.
在另一台装有Windows 8和IIS 8.5的PC上,使用几乎毫无意义的MSVSMON,调试速度要快得多.我试图模仿前一台机器的Visual Studio和IIS的每一个调试设置,但调试仍然很慢,MSVSMON仍然达到高CPU使用率.
为什么会这样?我该怎么做才能解决我的问题并减少CPU使用率?
我正在第一次潜入F#工作,我正在进行几次C#单元测试,我必须将F#作为练习.我们的测试非常复杂,但我很喜欢这个挑战(使用设置,继承,拆卸等).
正如我所看到的那样,如果可能的话,应该避免可变性,但是当编写[SetUp]测试的部分时,我似乎找不到跳过可变性的方法.为测试创建虚拟XML的示例::
[<TestFixture>]
type CaseRuleFixture() =
[<DefaultValue>] val mutable xsl : XNamespace
[<DefaultValue>] val mutable simpleStylesheet : XElement
[<DefaultValue>] val mutable testNode : XElement
[<DefaultValue>] val mutable rootNode : XElement
[<DefaultValue>] val mutable root : XElement
let CreateXsltHeader(xsl: XNamespace) =
// Build XSLT header
let styleSheetRoot =
new XElement(
xsl + "stylesheet",
new XAttribute(XName.Get "version", "1.0"),
new XAttribute(XNamespace.Xmlns + "xsl", "http://www.w3.org/1999/XSL/Transform"),
new XAttribute(XNamespace.Xmlns + "msxsl", "urn:schemas-microsoft-com:xslt"),
new XAttribute(XName.Get "exclude-result-prefixes", "msxsl"),
new XAttribute(XNamespace.Xmlns + "utils", "urn:myExtension"))
let outputNode = …Run Code Online (Sandbox Code Playgroud) 我已经能够在Azure服务结构中使用Settings.xml和App.config来检索像连接字符串这样的参数.两者之间有什么区别?我应该如何使用它们?
我正在尝试使用像这样的简单OData客户端库(C#)执行从CRM Dynamics检索信息的查询:
var settings = new ODataClientSettings(resource + "/api/data/v8.0/");
settings.BeforeRequest = (request) =>
{
request.Headers.Clear();
request.Headers.Add("Authorization", accesstoken.AccessTokenType + " " + accesstoken.AccessToken);
};
settings.PayloadFormat = ODataPayloadFormat.Json;
var client = new ODataClient(settings);
var annotations = new ODataFeedAnnotations();
var transactions = await client.For("mss_transaccions").FindEntriesAsync(annotations);
while (annotations.NextPageLink != null)
{
transactions = transactions.Union(await client.For("mss_transaccions").FindEntriesAsync(annotations.NextPageLink, annotations));
}
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它非常慢,因为我对mss_transaccions表的查询有7200个实体.我正在看Fiddler的输出,我可以看到它正在尝试下载大约20 MB的信息.
我试图在谷歌浏览器上运行相同的查询,我可以看到默认情况下获得的响应以gzip格式压缩,从20MB到仅仅500KB.所以我推断Simple OData Client没有进行任何压缩,这就是为什么它非常慢.
此外,来自OData Simple Client的请求要求提供另外4MB的元数据信息,而Chrome或简单的HttpClient请求则不需要进行该调用.
有什么我可以做的来改善它并启用压缩吗?
谢谢.
我有一个 lambda,我需要它正常关闭并登录到外部系统。在查看了有关此事的一些文献后,我使用线程得出了以下解决方案:
def lambda_handler(event, context):
threshold_millis = 10 * 1000 # leave when there are only 10 seconds left
que = queue.Queue()
t = threading.Thread(target=lambda q, ev: q.put(do_work(ev)), args=(que, event))
t.daemon = True
t.start()
while True:
if context.get_remaining_time_in_millis() < threshold_millis:
# Do some logging notifying the timeout
return {
"isBase64Encoded": False,
"statusCode": 408,
"headers": {'Content-Type': "application/json"},
"body": "Request timed out"
}
elif not t.isAlive():
response = que.get()
return response
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
虽然它有效,但我想知道:有没有比这个更好的实践来优雅地处理 AWS Lambda 中的超时?
我有以下代码尝试连接到使用OpenSSH构建的SFTP服务器(服务器正常工作,因为我已经能够通过WinSCP客户端成功连接到此FTP):
ConnectionInfo ConnNfo = new ConnectionInfo("127.0.0.1", 22, "usertest",
new AuthenticationMethod[]{
// Pasword based Authentication
new PasswordAuthenticationMethod("usertest","usertest"),
}
);
// Upload A File
using (var sftp = new SftpClient(ConnNfo))
{
sftp.Connect();
sftp.ChangeDirectory(@"/C:/IISFTP/");
using (var uplfileStream = File.OpenRead(uploadfn))
{
sftp.UploadFile(uplfileStream, uploadfn, true);
}
sftp.Disconnect();
}
Run Code Online (Sandbox Code Playgroud)
调用该sftp.Connect()行时,会引发以下异常:
消息类型80无效
为什么会这样?如何使用SSH.NET连接到我的SFTP服务器?
谢谢
我手头有以下代码:
match intersection with
| None ->
printfn "Please provide an empty intersection for ring placement"
gameState
| Some x ->
match x.Status with
| Empty ->
let piece = { Color = gameState.Active.Color; Type = Ring }
putPieceOnIntersection gameState.Board pos piece
printfn "%s ring placed at %A" (colorStr gameState.Active.Color) pos
// Decide if we ended this phase
let updatedPhase = if ringsPlaced = 10 then Main else Start(ringsPlaced + 1)
let newActivePlayer = gameState.Players |> Array.find (fun p -> …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
f# ×2
unit-testing ×2
ajax ×1
asp.net ×1
async-await ×1
aws-lambda ×1
compression ×1
debugging ×1
dictionary ×1
dynamics-crm ×1
hashset ×1
iis ×1
jquery ×1
mocking ×1
moq ×1
odata ×1
openssh ×1
python ×1
sftp ×1
ssh ×1
ssh.net ×1