本文整理汇总了C#中IXenConnection.DuplicateSession方法的典型用法代码示例。如果您正苦于以下问题:C# IXenConnection.DuplicateSession方法的具体用法?C# IXenConnection.DuplicateSession怎么用?C# IXenConnection.DuplicateSession使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IXenConnection
的用法示例。
在下文中一共展示了IXenConnection.DuplicateSession方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: DoWithSessionRetry
/// <summary>
/// Try and run the delegate.
/// If it fails with a web exception or invalid session, try again.
/// Only retry 60 times.
/// </summary>
/// <param name="connection"></param>
/// <param name="session"></param>
/// <param name="f"></param>
/// <param name="p"></param>
/// <returns></returns>
public static Object DoWithSessionRetry(IXenConnection connection, ref Session session, Delegate f, params object[] p)
{
int retries = 60;
while (true)
{
try
{
object[] ps = new object[p.Length + 1];
ps[0] = session;
for (int i = 0; i < p.Length; i++)
{
ps[i + 1] = p[i];
}
try
{
return f.DynamicInvoke(ps);
}
catch (TargetInvocationException exn)
{
throw exn.InnerException;
}
}
catch (WebException we)
{
log.ErrorFormat("WebException in DoWithSessionRetry, retry {0}", retries);
log.Error(we, we);
if (retries <= 0)
throw;
}
catch (Failure failure)
{
log.ErrorFormat("Failure in DoWithSessionRetry, retry {0}", retries);
log.Error(failure, failure);
if (retries <= 0)
throw;
if (failure.ErrorDescription.Count < 1 || failure.ErrorDescription[0] != XenAPI.Failure.SESSION_INVALID)
throw;
}
Session newSession = connection.DuplicateSession();
try
{
// Try and logout the old session using the new session
newSession.proxy.session_logout(session.uuid);
}
catch
{
}
session = newSession;
retries--;
Thread.Sleep(connection.ExpectDisruption ? 500 : 100);
}
}
示例2: GetSession
private Session GetSession(IXenConnection conn)
{
// First we look at this.Session. This allows us to sudo if we have only one connection.
if (Session != null && Session.Connection == conn)
return Session;
// Otherwise we dig into our dictionary of sessions for other connections. These cannot be sudo'ed,
// because there is no good way to make a sudo dialog (or a series of dialogs) for several connections.
if (Sessions.ContainsKey(conn))
return Sessions[conn];
Session s = conn.DuplicateSession();
Sessions[conn] = s;
return s;
}
示例3: NewSession
/// <summary>
/// Used for cross connection actions (e.g adding a host to a pool, we need to get a session from the connection we are joining)
/// Checks to see if we are using elevated credentials for this action. Returns a session using them if they exist, otherwise
/// using the basic credentials of the _supplied_ IXenConnection. Important - will throw exceptions similar to connection.NewSession
/// </summary>
/// <param name="xc"></param>
/// <returns></returns>
public Session NewSession(IXenConnection xc)
{
if (Connection == null)
return null;
if (String.IsNullOrEmpty(sudoPassword) || String.IsNullOrEmpty(sudoUsername))
return xc.DuplicateSession();
return xc.ElevatedSession(sudoUsername, sudoPassword);
}