小编Nie*_*nch的帖子

从一个SQL Server Express复制到另一个SQL Server Express

我有一个SQL Server Express实例,其中包含一个非常正常的良好数据库.我需要将数据连续复制到另一台服务器上的SQL Server Express实例.

现在,我知道SQL Server Express不包含内置复制的Publisher部分,因此我正在寻找替代解决方案.我不想升级任何数据库.

当然,我可以使用guids,时间戳等进行自己的复制,并使用我自己的编码传输数据(如SQL Server Express数据库复制/同步中所建议的那样),但我希望避免所有这些工作,特别是看到复制真的很基础.

也许每个表都添加了一个通用触发器?也许某种数据库工作?

有什么建议?

sql-server replication sql-server-express

6
推荐指数
1
解决办法
2万
查看次数

使用稍微复杂的方法引用WCF服务时获取"递归收集数据协定"

如果我在WCF服务中只使用简单的方法,一切正常.但是,如果我包含以下方法,则会出现问题:

[OperationContract]
public List<KeyValuePair<string, string>> GetAllAccounts()
{
    return AccountBusiness.GetAllAccounts();
}
Run Code Online (Sandbox Code Playgroud)

从其他项目引用服务时出现此错误:

警告5自定义工具警告:无法导入wsdl:portType详细信息:运行WSDL导入扩展时抛出异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter错误:类型'Newtonsoft.Json.Linq.JToken'是一个递归收集数据合同,不受支持.考虑修改集合'Newtonsoft.Json.Linq.JToken'的定义以删除对它自己的引用.XPath到错误源:// wsdl:definitions [@ targetNamespace =' http://tempuri.org']/wsdl:portType [@ name ='NodeService'] C:\ inetpub\wwwroot\MyclientProject\Service References\NodeService\Reference.svcmap 1 1 MyClientNode

如果我删除上面的方法,重新编译并更新引用,那么它工作正常.但是当我添加上述方法时,我始终会收到此警告.

我发现的一个建议是卸载Visual Studio 2012并修复Visual Studio 2010.我不想这样做.

另一个建议取消选中"在所有引用的程序集中重用类型",但这会弄乱方法签名并且不可用.

.net wcf wsdl exception-handling

5
推荐指数
1
解决办法
1万
查看次数

Chrome没有'Access-Control-Allow-Origin'标题,但标题就在那里

stackoverflow中已经提到了这个问题十几次,但我有一个不同的问题.

Chrome首先进行"OPTIONS"调用以获取标题.如您所见,正确的标题就在那里.

在此输入图像描述

出于某种原因,Chrome不会注意到标头并取消实际请求的方式与标头根本不存在时相同.

在此输入图像描述

该页实际上进行了三次调用并且很奇怪,其中一个是有效的.

在此输入图像描述

所以问题是,当标题确实存在时,为什么Chrome不尊重它?我该怎么做才能调试它?

更新

我尝试添加,Access-Control-Allow-Methods所以现在OPTIONS调用的标头响应包括这些响应标头:

Access-Control-Allow-Headers:Origin, X-Requested-With, Content-Type, Accept
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*
Run Code Online (Sandbox Code Playgroud)

结果是一样的.

在服务器端设置标头

我在每个请求上设置服务器端的头文件(在Global.asax.cs Application_BeginRequest中)

Response.Headers.Add("Access-Control-Allow-Origin", "*");
Response.Headers.Add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
Response.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
Run Code Online (Sandbox Code Playgroud)

在与Fiddler调查之后

我查看了原始请求和响应,发现了一些令人惊讶的错误:错误是来自应用程序的简单HTTP 500错误.可能因为HTTP 500错误不包含正确的标头,Chrome不会显示返回的错误,而是显示与标头相关的错误.

回答

总而言之,如果Chrome提供说它No 'Access-Control-Allow-Origin' header可能实际上掩盖了HTTP 500错误.这可以通过检查Fiddler中的请求和响应来确定.

jquery google-chrome cross-domain cors

5
推荐指数
1
解决办法
2560
查看次数

在非常繁忙的表中连续查找而不阻塞它的简单方法

我有一个每分钟接收数千次插入的表,重要的是插入速度非常快,否则会在我的应用程序的其他地方导致性能问题。这就是为什么这个表根本不包含任何索引的原因。这效果很好,插入性能令人满意。

但是,我也想经常在这个表中查找,就像复杂查询的每一秒一样。我不能按原样在桌子上做,因为如果没有索引,它的执行速度会太慢。

所以我想不断地将数据从这个表移动到另一个包含索引的表。但是,假设我每分钟都用一个简单的 sql 脚本移动它,恐怕我在移动记录(在事务中插入 + 删除)时可能会阻止插入到表中,这会影响我的应用程序的性能.

那么,实现这一目标的明智(但/和简单)方法是什么?

到目前为止,这是我最好的想法:

1. 使用 SQL Server 服务代理

我在桌子上放了一个触发器并向服务代理添加新项目,我认为这应该是异步的,不会导致性能问题。然后我需要另一个工作从队列中读取。我以前没有这样做过,我不确定这个解决方案有多好。

2.使用“复制”

我不喜欢这个解决方案,因为复制设置很复杂,所以我在这里提到它是为了说我很乐意不收到关于此的建议。

3. 就去做

可能是我多虑了。我应该每分钟运行一次吗?

BEGIN Transaction
-- Insert all rows in other table
-- Delete all rows from table
END Transaction
Run Code Online (Sandbox Code Playgroud)

请注意,目标表也将非常繁忙,因此该作业可能会在队列中等待大量查询完成。

期待听到您关于如何应对这一挑战的建议。

sql-server

5
推荐指数
1
解决办法
312
查看次数

为什么我不应该将所有数据放在一个 CosmosDB 集合中?

问题

发现Cosmos DB 的定价非常高,如果与许多数据类型一起使用,可能会很昂贵。

我认为一个好的结构是将我拥有的每个数据类型放在他们自己的集合中,几乎就像数据库中的表(不完全是)。

但是,每个收款每月至少要花费 24 美元。这是如果我选择“固定”,这将我限制为 10GB 并且不可扩展。几乎不是 Cosmos DB 的重点,所以我宁愿选择“无限”。但是,这里的价格至少为每月 60 美元。

每个数据类型每月 60 美元。

这包括1000 RU,但除此之外,我必须为消费支付更多费用。

如果我有几种数据类型,这可能没问题,但如果我是一个完全成熟的业务应用程序,有 30 种数据类型(一点也不罕见),至少每月 1800 美元。作为起价。当我还没有数据的时候。

问题

集合中数据的结构并不严格。我可以在同一个集合中存储不同类型的文档。

使用“无限”集合时,我可以使用分区键,它应该用于对我的数据进行分区以确保可扩展性。

但是,为什么我不只在分区键中包含数据类型?

然后分区键变成这样:

[customer-id]-[data-type]-[actual-partition-value, like 'state']
Run Code Online (Sandbox Code Playgroud)

快速移动,我的最低成本变成了 60 美元,其余的基于消费。据推测,无论数据量如何,分区键都能确保令人满意的性能。那么我错过了什么?这种方法有问题吗?

更新

Microsoft 现在支持在所有容器之间共享 RU(没有最低 10000 RU),因此这个问题基本上不再相关,因为您现在可以自由选择将数据分离到不同的容器中,而无需任何额外费用。

azure azure-cosmosdb

5
推荐指数
1
解决办法
943
查看次数

如何在我的Microsoft Teams自定义应用程序中重定向到另一个页面?

我有一个简单的Webapp,正在团队中作为应用程序显示。我已经在App Studio中进行了设置,一切都按我的预期进行,一切都很好。它显示了我的Web应用程序,这就是我想要的。

在某些情况下,我需要重定向到其他域上的其他Web应用程序。在我的浏览器中从Microsoft Teams进行测试时,它可以正常工作。但是,当我在桌面应用程序中通过Microsoft Teams进行测试时,当应该进行重定向时,屏幕只会变成灰色。

我已经将域添加到清单编辑器中的此对话框中。

来自团队清单编辑器中对话框的图像

因为屏幕只是灰色,没有任何说明,所以我很难对这个问题进行故障排除。

microsoft-teams

5
推荐指数
1
解决办法
136
查看次数

在哪里可以找到 Bot Framework 所需的 ID?

在大多数情况下,用于 Bot Framework 的 ID 很容易找到,因为您会在用户发起联系时发送给机器人的“活动”对象中接收它们。

但是,我正在尝试使用 Create Conversation 端点,这意味着我必须知道用户和机器人的 ID。

https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference?view=azure-bot-service-4.0#create-conversation

一个简化的请求(有效!)像这样:

{
"bot": {
    "id": "28:4a4f500c-4897-4eaf-a364-c67942f41f6f"
},
"members":[{
    "id": "29:1DUjC5z4ttsBQa0fX2O7B0IDu30R_6SfPMhwj-E1BwWmvYzb_IElqJwzPDocwPxTS0j8clYeb8gZx67V8TuChbA"
}],
"tenantId": "c7392b95-d07b-4653-87a7-6c709f527c42"
}
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式找到用户 ID(会员 ID),也许是通过 Graph API?或者也许通过 Bot Framework API?但是如何?

此外,我还希望能够以编程方式找到 Bot ID,因为我会将这个 bot 部署到许多租户,它会大大简化配置。但是,我在哪里可以找到 Bot ID,即使是手动的?它看起来不像是来自 Azure 的应用程序 ID 或对象 ID。

(我理解 28 和 29 的前缀,所以这与我的问题无关)

更新:

接受的答案的关键要点如下:

The userId is unique to your bot ID and a particular user. You cannot reuse the userId between bots. The channelId is global.
Run Code Online (Sandbox Code Playgroud)

这意味着我不能希望在其他地方找到 userId,这是一条非常重要的信息。

When your …
Run Code Online (Sandbox Code Playgroud)

azure botframework microsoft-teams azure-bot-service microsoft-graph-api

5
推荐指数
2
解决办法
555
查看次数

在本地不同的端口上运行 Azure Functions V3 (.NET 5)

使用以前版本的 Azure Functions,我曾经能够在 Properties -> Debug -> Application Arguments

host start --port 7073 --pause-on-error
Run Code Online (Sandbox Code Playgroud)

但是,在运行 .NET 5 的 Azure Functions V3 中,它不起作用。

当我尝试运行它时,我收到以下消息。

无法执行,因为找不到指定的命令或文件。可能的原因包括:

  • 您拼错了内置的 dotnet 命令。
  • 您打算执行 .NET 程序,但 dotnet-host 不存在。
  • 您打算运行一个全局工具,但在 PATH 中找不到具有此名称的带有 dotnet 前缀的可执行文件。

我需要为 .NET 5 使用不同的命令吗?或者把它放在一个完全不同的地方?

.net azure-functions azure-functions-core-tools .net-5

5
推荐指数
1
解决办法
231
查看次数

从 Javascript 强制完全刷新 Blazor WebAssembly PWA 应用程序

该代码位于index.html 中。我updateVersion使用最新版本的 Blazor WebAssembly PWA 应用程序调用 。第一行是 Service Worker 的原始注册,它是 Blazor 应用模板的一部分。剩下的都是我补充的。

navigator.serviceWorker.register('service-worker.js');

function updateVersion(newVersion) {
    var key = 'x-photish-version';

    var oldVersion = localStorage.getItem(key);

    if (oldVersion == null) {
        localStorage.setItem(key, newVersion);
    }
    else if (newVersion != oldVersion) {
        localStorage.setItem(key, newVersion);

        // Reload service worker
        navigator.serviceWorker.register('service-worker.js').then(function (registration) {

            caches.delete("blazor-resources-/").then(function (e) {
                console.log("'blazor-resources-/' cache deleted");
            });

            registration.update();

            window.location.reload(); 
        }).catch(function (error) {
            // registration failed
            console.log(`Registration failed with ${error}`);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

版本部分有效。它检测到该版本是新的,并且它正确地输入了newVersion != oldVersion我想要确保应用程序完全刷新的代码部分。

为了测试它,我发布了应用程序的新版本,并对应用程序进行了一些细微的更改,它检测到它是新版本并重新加载页面。我的小应用程序更改不会出现。它显示了应用程序的旧版本。

我必须找到一种从代码中执行此操作的方法,因为我不希望用户在每次页面加载时检索最新内容。仅当我实际部署了新版本的代码时。

我该如何确保 serviceworker …

service-worker progressive-web-apps blazor blazor-webassembly

5
推荐指数
1
解决办法
1717
查看次数

无状态可伸缩Web应用程序中SignalR(WebSockets)连接的体系结构

我将创建一个无状态,可伸缩的Web应用程序.这是我的第二天性而不是问题.

但是,这个将使用SignalR,因此将建立到每个用户的WebSocket连接.

想象一下,我的Web应用程序扩展到5个不同的Web服务器,处理来自5000个并发用户的负载.这些用户将建立WebSocket连接,即使负载均衡器确保负载在5个Web服务器之间分配,每个用户也将连接到一个特定的Web服务器.

现在问题来了.如果发生事件并且我想将此事件发送给我的某个连接用户,我该如何做?

用户可以连接到任何Web服务器,所以我想我要么需要一些数据库来跟踪哪些用户连接到哪个Web服务器?或者我需要将所有消息发送到所有Web服务器,如果他已连接,它将把消息传递给用户?

后者似乎不具备可扩展性.第一个似乎就是我必须做的事情,除非这里有人能告诉我一个最佳实践方法来应对这一挑战.

.net c# asp.net azure signalr

4
推荐指数
1
解决办法
469
查看次数