我已经使用了几年的代码,并且不得不将项目升级到.Net4。升级项目后,在访问任何方法后出现以下错误:
XML文档(1,1)中存在错误-十六进制值0x1F是无效字符。第1行的位置1。
以下是我尝试运行的代码示例:
Dim ConsumerKey As String = "XXXXXXXXXXXXXXXXXXXXXX"
Dim UserAgentString As String = "TEST Xero Interface (Private App Testing)"
Dim privateCertificate As X509Certificate2 = New X509Certificate2("C:\Data\public_privatekey.pfx", "xxxxxxx")
Dim uConsumerSession As IOAuthSession = New XeroApiPrivateSession(UserAgentString, ConsumerKey, privateCertificate)
Dim uRepository As New Repository(uConsumerSession)
Dim uInvoice As New Model.Invoice
Dim uContact As New Model.Contact
uContact.Name = "ABC Ltd"
uContact.IsCustomer = True
uInvoice.Contact = uContact
uInvoice.Type = "ACCREC"
uInvoice.Date = Now
uInvoice.DueDate = DateAdd(DateInterval.Day, 14, Now)
uInvoice.Status = "DRAFT"
uInvoice.LineAmountTypes = 0
uInvoice.LineItems = New LineItems
Dim uLineItem = New Model.LineItem
uLineItem.Quantity = 1
uLineItem.ItemCode = "TEST TRANS"
uLineItem.Description = "Testing Router"
uLineItem.AccountCode = "400"
uLineItem.UnitAmount = 200
uInvoice.LineItems.Add(uLineItem)
uRepository.Create(Of Model.Invoice)(uInvoice)
我在这里做错了什么?为什么我多年来使用的相同代码停止工作?
答案 0 :(得分:0)
TLDR;您的代码将使用不推荐使用的TLS 1.0-在代码中使用以下代码强制使用TLS 1.2
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
我确定您已经解决了这个问题,但是我得到的是同一件事,API返回了未记录的响应代码412,因此在进入API和执行操作之前就被拒绝了,
您希望用于.NET的旧版SDK中的错误响应处理效果不佳,因此尝试解析错误响应,从而导致错误-在调试时让我有些烦恼。>
我决定升级到正在积极维护的新Xeronet SDK-https://github.com/XeroAPI/Xero-Net
然后我得到了相同的错误,但是这次错误消息很有用,指出不支持TLS 1.0,请升级,啊。哈...根据他们的网站,他们在2018年6月下旬开始提供支持,我认为这实际上发生在7月底,因为我在7月底开始处理此代码。
无论如何,最好将代码升级到新的SDK,然后如果在.net 4.5上,则强制.net使用以下内容使用TLS 1.2
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
如果使用4.0,则
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;