该应用程序使用.NET 4.6.1和Microsoft.Azure.ServiceBus.EventProcessorHost nuget软件包v2.0.2及其依赖WindowsAzure.ServiceBus软件包v3.0.1来处理Azure事件中心消息.
该应用程序有一个实现IEventProcessor.当从ProcessEventsAsync方法抛出未处理的异常时,EventProcessorHost永远不会将这些消息重新发送到正在运行的实例IEventProcessor.(有趣的是,如果托管应用程序停止并重新启动,或者租约丢失并重新获得,它将重新发送.)
有没有办法强制将导致异常的事件消息重新发送EventProcessorHost给IEventProcessor实现?
本评论中提供了一个可能的解决方案,该问题几乎完全相同: IEventProcessor.ProcessEventsAsync中的Redeliver未处理的EventHub消息
该评论建议保留最后一个成功处理的事件消息的副本,并在发生异常时显式使用该消息进行检查点ProcessEventsAsync.但是,在实施和测试这样的解决方案后,EventProcessorHost仍然不会重新发送.实现非常简单:
private EventData _lastSuccessfulEvent;
public async Task ProcessEventsAsync(
    PartitionContext context,
    IEnumerable<EventData> messages)
{
    try
    {
        await ProcessEvents(context, messages);     // does actual processing, may throw exception
        _lastSuccessfulEvent = messages
            .OrderByDescending(ed => ed.SequenceNumber)
            .First();
    }
    catch(Exception ex)
    {
        await context.CheckpointAsync(_lastSuccessfulEvent);
    }
}
Run Code Online (Sandbox Code Playgroud)
此处提供部分日志示例:https://gist.github.com/ttbjj/4781aa992941e00e4e15e0bf1c45f316#file-gistfile1-txt
我需要为ASP.NET Web API生成绝对URL以用于以后的回调/重定向.
可以使用生成链接
Url.Link("RouteName", new { controller = "Controller", action = "Action" });
Run Code Online (Sandbox Code Playgroud)
这会返回正确的Url,但是,我需要它始终是https.Url.Link似乎使用当前请求的方案生成URL.例如,如果生成url的请求类似于http://www.myhost.com/controller/generateUrl,则Url.Link会生成一个http url.如果生成URL的请求是https://www.myhost.com/controller/generateUrl,则Url.Link会生成https网址.
需要始终使用https生成网址.是否有可以传递给Url.Link的参数或路由值来实现此目的?
谢谢.
尝试从 Entity Framework 6.2 代码编写迁移脚本,但当显式指定源迁移和目标迁移时,向下迁移脚本生成失败。
例如,我有一个DbContext包含三个迁移的测试项目:
201506161504528_InitialCreate202202102238227_Add_Entity_FantasticalCreature202202102239481_FantasticalCreature_Add_IsWinged_Add_HasTail使用以下命令明确编写向上迁移脚本可以正常工作:
Update-Database -SourceMigration "201506161504528_InitialCreate" `
      -TargetMigration "202202102238227_Add_Entity_FantasticalCreature" `
      -Script -Verbose
.\migrate.exe "TestContext.dll" 
       /targetMigration="202202102238227_Add_Entity_FantasticalCreature" 
       /scriptFile="script.sql" 
       /sourceMigration="201506161504528_InitialCreate" /verbose
Run Code Online (Sandbox Code Playgroud)
此外,在显式指定源迁移和目标迁移时,使用具有类似参数的MigratorScriptingDecorator和ScriptUpdate也会生成向上脚本。
然而,当尝试执行相反的操作时,即编写向下迁移脚本,其中目标和源均已明确指定,并且源是“较低”MigrationId,则上述所有方法都将失败。
例如,Update-Database这样调用:
update-database -SourceMigration "202202102238227_Add_Entity_FantasticalCreature" `
                -TargetMigration "201506161504528_InitialCreate" `
                -Script -Verbose
Run Code Online (Sandbox Code Playgroud)
结果出现异常:
System.Data.Entity.Migrations.Infrastruct.MigrationsException:不支持在两个指定迁移之间编写降级脚本。
在 System.Data.Entity.Migrations.Infrastruct.MigratorScriptingDecorator.ScriptUpdate(String sourceMigration, String targetMigration)
在 System.Data.Entity.Migrations.Design.ToolingFacade.ScriptUpdateRunner.RunCore()
在 System.Data.Entity.Migrations.Design。 ToolingFacade.BaseRunner.Run()不支持在两个指定迁移之间编写降级脚本。
尝试使用 或 进行显式向下脚本迁移时也会发生相同的migrate.exe异常MigratorScriptingDecorator.ScriptUpdate。
但是,如果未显式指定源迁移,但指定了目标迁移,并且向比指定目标迁移“更高”迁移的数据库提供连接字符串,则上述所有三种方法都将成功生成向下迁移SQL脚本。
例如,使用以下命令成功生成向下迁移Update-Database:
# Assumes TestContextDb-01 is currently at migration 2 or 3. …Run Code Online (Sandbox Code Playgroud) c# entity-framework entity-framework-6 entity-framework-migrations
作为第三方,是否有一种可行的方法可以正确解释蓝牙低功耗设备中没有已发布的GATT配置文件规范的数据?
BLE装置是一种体重秤,可支持体重,体重指数,体脂和水合程度.我的理解是,没有采用GATT身体尺度的配置文件,例如血压设备或心率监测器(https://developer.bluetooth.org/gatt/profiles/Pages/ProfilesHome.aspx).
使用以下工具:
我可以扫描,定位,连接和阅读规模上可用的GATT服务.以上所有工具都为我提供了相同的服务信息.在规模上发现了5项服务:
所有上述工具都能够从已知服务中读取,例如检索电池信息或设备名称.我的假设是具有自定义UUID的未知服务是提供比例数据的服务.
此服务具有5个未知特征,具有自定义UUID:
使用上面指定的工具从特征1,2和3中读取,每个工具都返回它自己的值,但该值永远不会改变.例如,读取特征1总是返回20个八位字节0x01-0x05-0x06-0x07-0x08和15个0x00个八位字节的值.特征1的后续读取始终返回该值.特征2读取总是返回20个八位字节0x02和19 0x00个八位字节的值.等等.
阅读特征5似乎不返回值,或者更常见于Android,发出配对请求.没有共同的配对代码(如0000或1234等)有效.
特征4似乎是实际传输比例数据的内容.使用上面的工具,我可以启用通知,应用程序检索13个八位字节.例如:
显然,所有这些值都以相同的八位组开头.然而,主要的问题是这些八位字节代表什么,它们如何转化为体重/体重/水合/体脂值,如果事实上它们根本就是这样.
该秤采用Ti CC2541芯片(http://www.ti.com/product/cc2541)构建.
使用Ti的SmartRF协议数据包嗅探器和CC2540 USB评估模块套件,我可以捕获iPhone 5S(iOS 7.1)和规模之间的数据包.这提供了一些额外的见解,但大多只是显示我已经使用其他工具观察到的内容,尽管它处于较低级别.数据包嗅探器提供的任何其他信息仍然会回到同一个问题:规模发送的这些八位字节集代表什么,它们如何转换为weight/bmi/etc?我已经使用了蓝牙核心规范文档,这有助于理解标准功能的八位字节意味着/做什么,但这无助于理解实际的规模数据.
我对蓝牙开发很新,这项练习基本上导致了技术的速成课程.任何帮助表示赞赏.
谢谢.
bluetooth texas-instruments bluetooth-lowenergy android-bluetooth ios-bluetooth
在Visual Studio 2015中,我有一个测试项目,我已经添加了一个fakes程序集.
在单元测试本身中,我为静态泛型方法创建了一个垫片,该方法将实例返回到泛型类型,例如:
using (ShimsContext.Create())
{
    ShimStaticClass.TheMethod<MyType>(() => instanceOfMyType);
    // ... code that uses StaticClass.TheMethod here ...
}
Run Code Online (Sandbox Code Playgroud)
当解决方案在调试模式下构建时,测试运行正常并通过.但是,当解决方案在释放模式下构建时,调用版本的TheMethod 不会被调用,这会导致测试失败.
我知道shimmed方法没有被调用,因为我已经通过执行以下操作将其更改为抛出异常:
using (ShimsContext.Create())
{
    ShimForStaticClass.TheMethod<MyType>(() => 
    {
        throw new InvalidOperationException("Shim was called");
    });
    // ... code that uses StaticClass.TheMethod here ...
}
Run Code Online (Sandbox Code Playgroud)
并且不抛出此异常.
我已经开启了诊断日志记录和假冒的嘈杂冗长,但构建日志并未表明存在任何问题.
c# ×4
.net ×1
asp.net ×1
azure ×1
bluetooth ×1
entity-framework-migrations ×1
mstest ×1
unit-testing ×1