- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WebAPI
项目,它接受来自外部服务的 XML,并将它们插入到 SQL Server
数据库中。外部服务总是发送有关该项目的最新状态,因此给出示例(Id 元素在一个 XML 中始终具有相同的值):
第一篇文章:
<Items>
<Item>
<Id>1</Id>
<Content>AB</Content>
<Other>qwe</Other>
</Item>
<Item>
<Id>1</Id>
<Content>CD</Content>
<Other>qwe</Other>
</Item>
</Items>
第二篇文章:
<Items>
<Item>
<Id>1</Id>
<Content>AB</Content>
<Other>rty</Other>
</Item>
<Item>
<Id>1</Id>
<Content>CD</Content>
<Other>qwe</Other>
</Item>
<Item>
<Id>1</Id>
<Content>FG</Content>
<Other>qwe</Other>
</Item>
</Items>
所以在第一篇文章中,我得到了 2 个项目并将它们插入到数据库中。现在第二个,我看到 AB-qwe 已更改为 AB-rty - 我需要更新此记录; CD-qwe 没有改变——什么都不需要;还有一个新的需要插入。还有一种情况是某个项目不再存在意味着我需要删除它。
为了实现这一点,我正在做的是删除我得到的所有内容并插入最新状态。
private static void AddOrUpdate(CancellationToken ct, string raw)
{
try
{
var items = Utils.DeserializeObject<Items>(raw);
using (var context = new MyContext())
{
var existingItems = context.Items.Where(r => r.Id == items.First().Id);
foreach (var existing in existingItems)
{
context.Items.Remove(existing);
}
foreach (var item in items.Item)
{
context.Items.Add(new Item
{
//... skipped
});
}
context.SaveChanges();
}
}
catch (Exception ex)
{
// handle
}
}
这种方法对我很有效,但我产生了很多开销,因为实际上这些项目很少改变。大多数时候我得到完全相同的 XML。所以问题是,如果我已经处理了进来的元素,我怎么能理解呢?我的一个想法是从每个对象中获取校验和并将它们维护在某个列表中,因此当对象进入时,获取校验和,查看是否处理了这个对象,如果是,则返回,否则执行此删除-插入循环。这应该比每次都执行数据库例程要快得多。这样做的问题是,当 IIS 应用程序池被回收时,我将丢失我的列表并且必须重新开始。你会如何处理像我这样的情况?
我不是将 XML 插入到 Db 中,而是将 XML 反序列化为一个对象,该对象表示实体模型
,例如:
[XmlRoot(ElementName = "item")]
public class Item
{
[XmlElement("Id")]
[Index("idx_item_id")]
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long ItemId{ get; set; }
[XmlElement("Content")]
[Index("idx_content_bla")]
public string Content{ get; set; }
[XmlElement("Other")]
public string OtherStuff{ get; set; }
}
最佳答案
您的方法的简单解决方案是某种缓存。例如,您可以使用 memcache
即使在应用程序轮询回收之后,它也会保留数据,而且您可以将此操作分散到更多进程或更多机器上。
关于c# - 处理具有相同内容的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068495/
据我了解,HTTP POST 请求的正文大小没有限制。因此,客户端可能会在一个 HTTP 请求中发送 千兆字节 的数据。现在我想知道 HTTP 服务器应该如何处理此类请求。 Tomcat 和 Jett
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
假设我有一个负载均衡器,然后是 2 个 Web 服务器,然后是一个负载均衡器,然后是 4 个应用程序服务器。 HTTP 响应是否遵循与 HTTP 请求服务相同的路径? 最佳答案 按路径,我假设您是网络
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
是否有特定的(或约定的)HTTP 响应消息(或除断开连接之外的其他操作)来阐明服务器不接受 pipelined HTTP requests ? 我正在寻找能让客户端停止流水线化它的请求并分别发送每个请
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我使用 Mule 作为 REST API AMQP。我必须发送自定义请求方法:“PRINT”,但我收到: Status Code: 400 Bad Request The request could
我需要针对具有不同 HTTP 响应代码的 URL 测试我的脚本。我如何获取响应代码 300、303 或 307 等的示例/示例现有 URL? 谢谢! 最佳答案 您可以使用 httpbin为此目的。 例
我正在尝试编写一个程序来匹配 HTTP 请求及其相应的响应。似乎在大多数情况下一切都运行良好(当传输完全有序时,即使不是,通过使用 TCP 序列号)。 我发现的唯一问题是当我有流水线请求时。在那之后,
RESTful Web Services鼓励使用 HTTP 303将客户端重定向到资源的规范表示。它仅在 HTTP GET 的上下文中讨论主题。 这是否也适用于其他 HTTP 方法?如果客户端尝试对非
当使用chunked HTTP传输编码时,为什么服务器需要同时写出chunk的字节大小并且后续的chunk数据以CRLF结尾? 这不会使发送二进制数据“CRLF-unclean”和方法有点多余吗? 如
这个问题在这里已经有了答案: Is it acceptable for a server to send a HTTP response before the entire request has
如果我向同一台服务器发出多个 HTTP Get 请求并收到每个请求的 HTTP 200 OK 响应,我如何使用 Wireshark 判断哪个请求映射到哪个响应? 目前看起来像是发出了一个 http 请
func main() { http.HandleFunc("/", handler) } func handler(w http.ResponseWriter, r http.Request
我找不到有值(value)的 NodeJS with Typescript 教程,所以我在无指导下潜入水中,果然我有一个问题。 我不明白这两行之间的区别: import * as http from
问一个关于Are HTTP headers case-sensitive?的问题,如果 HTTP 方法区分大小写,大多数服务器如何处理“get”或“post”与“GET”或“POST”? 例如,看起来
我正在使用ASP.NET,在其中我通过动词GET接收查询,该应用程序专用于该URL。 该代码有效,但是如果用户发送的密码使http 200无效,请回答我,并在消息的正文中显示“Fail user or
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 9
我是一名优秀的程序员,十分优秀!