当有任何 SOAP 请求的挂起的实体框架数据库迁移时抛出 SOAP 异常

Posted

技术标签:

【中文标题】当有任何 SOAP 请求的挂起的实体框架数据库迁移时抛出 SOAP 异常【英文标题】:Throw SOAP exception when there are pending Entity Framework database migrations for any SOAP request 【发布时间】:2020-08-21 12:05:12 【问题描述】:

当有待处理的实体框架迁移并且有人发送任何 SOAP 请求时,我想抛出一个 SOAP 异常。如果我在我的Global.asax 中抛出一个FaultException,我会从 IIS 获得一个 html 响应。这有效,但它相当难看。所以我试图把它放在我的ServiceBehavior 类的IServiceBehavior.Validate() 方法中。

 public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
 
     var isDatabaseUpdateRequired = new MyDb().GetPendingMigrations().Any();
     if (isDatabaseUpdateRequired) throw new FaultException("There are pending migrations.");
 

但是我在我的 SoapUI 客户端上没有收到任何带有错误消息的 XML 响应。我应该在哪里抛出这个异常?

【问题讨论】:

【参考方案1】:

您可以在实现接口IDispatchMessageInspector 的类中抛出此异常。实施IDispatchMessageInspector 以在将请求消息分派给操作之前或在将回复消息返回给调用者之前检查或修改入站或出站应用程序消息。

服务器收到客户端请求后,DispatchMessageInspector拦截所有客户端请求。

上图是IDispatchMessageInspector的实现,在BeforeSendReply方法中抛出异常。

客户端向服务器发送请求并获得异常消息。

Here is a link 关于IDispatchMessageInspector 接口。

【讨论】:

以上是关于当有任何 SOAP 请求的挂起的实体框架数据库迁移时抛出 SOAP 异常的主要内容,如果未能解决你的问题,请参考以下文章

实体框架6代码首先用oracle更新实体

任务的挂起和激活

检查挂起的 Django 迁移

一文搞明白协程的挂起和恢复

一文搞明白协程的挂起和恢复

一文搞明白协程的挂起和恢复