我正在开发一个开放源代码项目,该项目将允许开发人员集成azure密钥保管库以在运行时获取机密,并在当前凭证过时的情况下自动故障转移到一组备份凭证。
当前,它适用于Azure Service Bus,我可以在其中旋转凭据,捕获失败,使用相同的对象重新发出相同的请求,然后代码以一种愉快的方式进行。
在我目前尝试该解决方案时,我注意到您可以整天运行DbContext.Add(entity)
,但实际上不会失败,直到DbContext.Save()
方法运行为止。发生这种情况时,将从上下文工厂中生成一个新的dbContext,但是在调用“保存更改”之前,我需要保留从Add,Update,Delete调用的所有更改。
这是我用来在失败时“重试”的通用方法,只要不需要将任何内容传递给下一个DbContext
,此重试逻辑就可以工作。
注意:传递给DbContext
的“ Args”是用于创建新连接字符串的用户名和密码。
_keySet管理“活动”凭证和过期凭证。
private G GenericRetry<G>(Func<G> retryMethod)
{
G result = default(G);
try
{
result = retryMethod();
}
catch (DbUpdateException exp)
{
_keySet.Rotate();
string[] args = new string[] { _keySet.Active.Identifier, _keySet.Active.Token };
_activeContext = _contextFactory.CreateDbContext(args);
result = GenericRetry(retryMethod);
_keySet.Refresh();
}
return result;
}
private G GenericRetry<L,G>(Func<L, G> retryMethod, L parameter)
{
G result = default(G);
try
{
result = retryMethod(parameter);
}
catch(DbUpdateException exp)
{
_keySet.Rotate();
string[] args = new string[] { _keySet.Active.Identifier, _keySet.Active.Token };
_activeContext = _contextFactory.CreateDbContext(args);
result = GenericRetry(retryMethod, parameter);
_keySet.Refresh();
}
return result;
}
关于如何将无效的DbContext
切换为新的import React, { useState } from 'react';
import { View, Text, StyleSheet, Platform } from 'react-native';
import AppIntroSlider from 'react-native-app-intro-slider';
import Main from './Component/Main';
import Picture from './Component/Picture';
import CurrentWeather from './Component/CurrentWeather';
const slides = [
{
key: '1',
component: <Main />,
},
{
key: '2',
component: <Picture />,
},
{
key: '3',
component: <CurrentWeather />,
},
];
const App = () => {
const [show, setShow] = useState(false);
const on_Done_all_slides = () => {
setShow(true);
};
const on_Skip_slides = () => {
setShow(true);
};
if (show) {
return (
<View>
<Text> Welcome </Text>
</View>
);
} else {
return (
<AppIntroSlider
slides={slides}
onDone={on_Done_all_slides}
showSkipButton={true}
onSkip={on_Skip_slides}
/>
);
}
};
export default App;
并保留所有未完成的更改的任何建议?