GVKun编程网logo

强制 Arc>>>> 到 Arc>>>> 将不起作用

23

本文将带您了解关于强制Arc>>>>到Arc>>>>将不起作用的新内容,另外,我们还将为您提供关于.MySQLTransactionRollbackException:Lockwaittimeoute

本文将带您了解关于强制 Arc>>>> 到 Arc>>>> 将不起作用的新内容,另外,我们还将为您提供关于.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction、.net – Option Strict和Option Explicit有什么作用?、Add-Migration Init,Option ''trusted_connection'' not supported.、c# – Braintree API在Sandbox中的CreateCard.Create上抛出Braintree.Exceptions.AuthorizationException的实用信息。

本文目录一览:

强制 Arc<Mutex<Option<Box<MyStruct>>>>> 到 Arc<Mutex<Option<Box<dyn Trait>>>>> 将不起作用

强制 Arc>>>> 到 Arc>>>> 将不起作用

我试图在里面存储一个 dyn 特征Arc<Mutex<Option<Box<>>>>>,但是由于某种原因它不起作用

use std::sync::{Arc, Mutex};trait A{}struct B{}impl A for B{}struct H{    c: Arc<Mutex<Option<Box<dyn A>>>>}fn main() {    let c =     Arc::new(Mutex::new(Some(Box::new(B{}))));    H{        c: c    };}

错误:

error[E0308]: mismatched types  --> src/main.rs:17:12   |17 |         c: c   |            ^ expected trait object `dyn A`, found struct `B`   |   = note: expected struct `Arc<Mutex<Option<Box<(dyn A + ''static)>>>>`              found struct `Arc<Mutex<Option<Box<B>>>>`

看起来它不能将 a 存储dyn为 a Box<B>,这很奇怪,因为它有效:

fn main() {    let c: Arc<Mutex<Option<Box<dyn A>>>> =     Arc::new(Mutex::new(Some(Box::new(B{}))));}

有什么不同?

答案1

有什么不同?

Box和其他标准库类型有一个非常特殊的情况,它们可以包含动态大小的值,如dyn A.

let c = Arc::new(Mutex::new(Some(Box::new(B{}))));H { c: c };

在此代码中,您已将变量c(没有类型声明)初始化为类型推断为 的值Arc<Mutex<Option<Box<B>>>,然后尝试将其存储在类型为 的字段中Arc<Mutex<Option<Box<dyn A>>>。这是行不通的,因为这两种类型具有不同的内存布局。

let c: Arc<Mutex<Option<Box<dyn A>>>> =     Arc::new(Mutex::new(Some(Box::new(B{}))));

在这段代码中,你已经c一个类型声明,作为结果,其中需要dyn知道在哪里的建造点,这使得胁迫很快发生,你可以强迫一个Box<B>Box<dyn A>的,因为Box实现了特殊的特质CoerceUnsized. (相同的机制适用于转换&B&dyn A。)但是,这不适用于包含a 的任意类型Box<B>——甚至不适用Option<Box<B>>,更不用说更复杂的类型了。

你可以c在构造它时给出一个类型:

let c: Arc<Mutex<Option<Box<dyn A>>>> = Arc::new(Mutex::new(Some(Box::new(B{}))));H { c: c };

或者,稍微短一点但更奇怪,您可以只Box用它需要的类型注释 的直接容器:

let c = Arc::new(Mutex::new(Some::<Box<dyn A>>(Box::new(B{}))));H { c: c };

或者您可以使用as运算符编写显式强制:

let c = Arc::new(Mutex::new(Some(Box::new(B{}) as Box<dyn A>)));H { c: c };

.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction

.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction


com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_191]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_191]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_191]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_191]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:952) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3188) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.wall.WallFilter.preparedStatement_executeQuery(WallFilter.java:648) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeQuery(PreparedStatementProxyImpl.java:181) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227) [druid-1.1.14.jar:1.1.14]
    at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:96) [quartz-2.3.0.jar:na]
    at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113) [quartz-2.3.0.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3842) [quartz-2.3.0.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggersFired(JobStoreSupport.java:2962) [quartz-2.3.0.jar:na]
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:353) [quartz-2.3.0.jar:na]

2019-05-13 14:39:03.953 ERROR 10652 --- [SchedulerThread] druid.sql.Statement                      : {conn-1010019, pstmt-1020072} execute error. SELECT * FROM QRTZ_LOCKS WHERE SCHED_NAME = ''RASScheduler'' AND LOCK_NAME = ? FOR UPDATE

com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_191]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_191]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_191]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_191]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:952) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3188) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.wall.WallFilter.preparedStatement_executeQuery(WallFilter.java:648) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:3185) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeQuery(PreparedStatementProxyImpl.java:181) [druid-1.1.14.jar:1.1.14]
    at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227) [druid-1.1.14.jar:1.1.14]
    at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:96) [quartz-2.3.0.jar:na]
    at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113) [quartz-2.3.0.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3842) [quartz-2.3.0.jar:na]
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggersFired(JobStoreSupport.java:2962) [quartz-2.3.0.jar:na]
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:353) [quartz-2.3.0.jar:na]

2019-05-13 14:39:56.001 ERROR 10652 --- [SchedulerThread] druid.sql.Statement                      : {conn-1010019, pstmt-1020073} execute error. SELECT * FROM QRTZ_LOCKS WHERE SCHED_NAME = ''RASScheduler'' AND LOCK_NAME = ? FOR UPDATE

com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_191]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_191]

.net – Option Strict和Option Explicit有什么作用?

.net – Option Strict和Option Explicit有什么作用?

我看到这个帖子:

Typos… Just use option strict and explicit please.. during one software development project,which I was on as a consultant,they were getting ridiculous amounts of errors everywhere… turned out the developer Couldn’t spell and would declare variables with incorrect spelling.. no big deal,until you use the correct spelling when you’re assigning a value to it… and you had option explicit off. Ouch to them…”

什么是选项严格和选项显式?我已经google了它,但不能得到的想法(因为大多数是Visual Basic,我做PHP)。

Option Explicit意味着必须声明所有变量。见 here.没有这个,你可以不小心声明一个新的变量,只是拼错另一个变量名。这是其中的一个事情,导致很多的悲伤,因为你试图调试VB程序,找出为什么你的程序不能正常工作。在我看来,这不应该是一个选项 – 它应该永远在。

选项严格“将隐式数据类型转换限制为仅扩大转换”。请参见here.启用此选项后,您不能意外地将一种数据类型转换为不太精确的另一种数据类型(例如,从整数到字节)。同样,默认情况下应打开的选项。

Add-Migration Init,Option ''trusted_connection'' not supported.

Add-Migration Init,Option ''trusted_connection'' not supported.

问题:

本人使用Abp创建项目 Add-Migration Init,更改数据库连接方式为mysql时,重新初始化Migration时出现Option ''trusted_connection'' not supported.错误

System.ArgumentException: Option ''trusted_connection'' not supported.
   at MySql.Data.MySqlClient.MySqlConnectionStringOption.GetOptionForKey(String key) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnectionStringBuilder.cs:line 452
   at MySql.Data.MySqlClient.MySqlConnectionStringBuilder.set_Item(String key, Object value) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnectionStringBuilder.cs:line 354
   at System.Data.Common.DbConnectionStringBuilder.set_ConnectionString(String value)
   at MySql.Data.MySqlClient.MySqlConnectionStringBuilder..ctor(String connectionString) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnectionStringBuilder.cs:line 19
   at Microsoft.EntityFrameworkCore.MySqlDbContextOptionsExtensions.UseMySql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 mySqlOptionsAction)
   at Microsoft.EntityFrameworkCore.MySqlDbContextOptionsExtensions.UseMySql[TContext](DbContextOptionsBuilder`1 optionsBuilder, String connectionString, Action`1 mySqlOptionsAction)

原因:修改appsettings.json数据库连接文件ConnectionStrings不彻底

解决:

ctrl+f,查找所有自己创建项目时默认的数据库连接语句,看看哪个没有改,修改后重试

c# – Braintree API在Sandbox中的CreateCard.Create上抛出Braintree.Exceptions.AuthorizationException

c# – Braintree API在Sandbox中的CreateCard.Create上抛出Braintree.Exceptions.AuthorizationException

我正在使用ASP.NET MVC 4,.NET Braintree Payments API和Braintree.js.

这是我为Braintree构建的一个简单的包装器:

public class PaymentBL
{
    private static BraintreeGateway _braintreeGateway = new BraintreeGateway
        {
            Environment = Braintree.Environment.SANDBox,MerchantId = "xxxxxxx",PublicKey = "xxxxxxxxxxxx",PrivateKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        };

    public Result<Transaction> ChargeCardOnce(decimal amount,string cardholderName,string cardNumber,string expiration,string cvv)
    {
        TransactionCreditCardRequest creditCardRequest = new TransactionCreditCardRequest();
        creditCardRequest.CardholderName = cardholderName;
        creditCardRequest.Number = cardNumber;
        creditCardRequest.ExpirationDate = expiration;
        creditCardRequest.CVV = cvv;

        TransactionoptionsRequest optionsRequest = new TransactionoptionsRequest();
        optionsRequest.SubmitForSettlement = true;

        TransactionRequest transactionRequest = new TransactionRequest();
        transactionRequest.Amount = amount;
        transactionRequest.CreditCard = creditCardRequest;
        transactionRequest.Options = optionsRequest;

        return _braintreeGateway.Transaction.Sale(transactionRequest);
    }

    /// <summary>
    /// Stores a credit card in the Braintree vault.  In some cases,will put a $1 temporary charge
    /// on the credit card that will come off a few days later.
    /// 
    /// From BrainTree: Regardless of card type,any instance where a $1 authorization returns a successful result,/// we immediately follow-up with an automatic void request to ensure that the transaction will fall off 
    /// of the cardholder's statement as soon as possible.
    /// </summary>
    public Result<CreditCard> StoreCustomer(int customerId,string cvv)
    {
        //CreditCardAddressRequest addressRequest = new CreditCardAddressRequest();
        //addressRequest.PostalCode = postalCode;

        CreditCardOptionsRequest optionsRequest = new CreditCardOptionsRequest();
        optionsRequest.VerifyCard = true;
        optionsRequest.VerificationMerchantAccountId = _braintreeGateway.MerchantId;

        CreditCardRequest creditCard = new CreditCardRequest();
        creditCard.CustomerId = customerId.ToString();
        creditCard.Token = customerId.ToString();   // Use same token to ensure overwrite
        creditCard.CardholderName = cardholderName;
        creditCard.Number = cardNumber;
        creditCard.ExpirationDate = expiration;
        creditCard.CVV = cvv;
        creditCard.Options = optionsRequest;

        return _braintreeGateway.CreditCard.Create(creditCard);
    }

    /// <summary>
    /// Search BrainTree vault to retrieve credit card
    /// </summary>
    /// <param name="customerId"></param>
    public CreditCard GetCreditCardOnFile(int customerId)
    {
        Customer customer = null;

        try
        {
            customer = _braintreeGateway.Customer.Find(customerId.ToString());
        }
        catch (Braintree.Exceptions.NotFoundException)
        {
            return null;
        }

        if (customer.CreditCards == null || customer.CreditCards.Length == 0)
        {
            return null;
        }

        if (customer.CreditCards.Length >= 2)
        {
            throw new Exception(string.Format("Customer {0} has {1} credit cards",customerId,customer.CreditCards.Length));
        }

        return customer.CreditCards[0];
    }
}

当我调用这个方法时,它可以工作:

Result<Transaction> result = paymentBL.ChargeCardOnce(
                2.34m,formCollection["name"],formCollection["number"],formCollection["exp"],formCollection["cvv"]
            );

随后,我可以在Braintree仪表板中查看已完成的测试事务.因此,我知道Braintree.js的加密表单值正确地到达我的控制器操作,并且我的密钥和商家帐户ID都已正确设置.

当我使用以下对StoreCustomer的调用将上述调用替换为ChargeCardOnce时,我在返回_braintreeGateway.CreditCard.Create(creditCard)行返回Braintree.Exceptions.AuthorizationException;

Result<CreditCard> result = paymentBL.StoreCustomer(
                systemHost.Customer.CustomerId,formCollection["cvv"]
            );

来自Braintree的支持:“您可以在沙箱中创建客户和信用卡,因为它的构建完全反映了生产环境的样子.”

有没有人经历过这个?我指的是Braintree对这个问题的支持,但是如果SO上的任何人看到了这个问题并且知道解决方案或解决方法,我会很放心.

解决方法

我在布伦特里工作.看起来我们已经回复了你的问题的答案,但我会在这里回答那些在将来遇到同样问题的人.

在这种情况下,问题是:

optionsRequest.VerificationMerchantAccountId = _braintreeGateway.MerchantId;

您的商家ID标识了您的付款网关帐户,而您的商家帐户ID标识了您要用于验证的银行帐户. An article in our support center explains the difference:

MerchantAccountId

With Braintree,you can have multiple merchant
accounts all processing via the same gateway account. This
means that you can have multiple locations,multiple businesses,
multiple currencies,etc. all setup and processing under a single
account. This makes it easy to keep track of all of your processing
via unified reporting and access and can even save you money.

You can find the IDs for all merchant accounts in your gateway
account by following these steps:

  • login to your account

  • hover over your account name
    and click “Processing”

  • scroll to the bottom of the page to the
    section labeled “Merchant Accounts”.

AuthorizationException是HTTP Status Code 403 Forbidden.这意味着服务器正在拒绝您的请求,因为您没有访问资源的权限(即使您可能已经过身份验证).

由于您的用户没有可以使用您指定的ID的商家帐户(因为它根本不是商家帐户ID),因此您将获得AuthorizationException.

如果通常情况下,您的商家只有一个商家帐户,或者您想使用默认帐户,则无需指定VerificationMerchantAccountId.

关于强制 Arc>>>> 到 Arc>>>> 将不起作用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction、.net – Option Strict和Option Explicit有什么作用?、Add-Migration Init,Option ''trusted_connection'' not supported.、c# – Braintree API在Sandbox中的CreateCard.Create上抛出Braintree.Exceptions.AuthorizationException等相关知识的信息别忘了在本站进行查找喔。

本文标签: