我有一个在Windows Server 2012上运行的经典ASP网站.一个页面使用以下代码通过https向另一个应用程序发出HTTP请求:
Sub ShopXML4http(url, inStr, outStr, method, xmlerror)
Dim objhttp
Set objhttp = Server.CreateObject ("MSXML2.ServerXMLHTTP.6.0")
objHttp.open method, url, false
If Method="POST" Then
objHttp.Send instr
Else
objHttp.Send
End if
outstr=objHttp.responseText
Set objhttp=nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
这段代码几乎在所有时间都可以正常工作(每天数千个请求),但偶尔会出现这样的消息:
编号:-2147012739
说明:安全通道支持发生错误
来源:msxml6.dll
该应用程序最近从旧的Windows 2003 Server迁移到2012 Server,这个问题在旧服务器上似乎永远不会出现问题.此外,虽然这个错误发生在网站上,我可以在VBScript中运行完全相同的代码,它工作正常.重置应用程序池似乎导致站点能够再次执行安全HTTP请求(尽管它经常在我到达服务器之前修复自己).
我有一个 .Net 6.0 应用程序(在 VS2019 中以 .Net 5.0 开始)。我使用 EF Core 进行数据访问。我们较旧的应用程序是.Net 4.8,我们有很多 T4 模板,用于生成基于 EDMX (EF6) 的服务类和模型类。在 .Net 6.0 应用程序中,我决定继续使用这些模板(稍作修改),因此我在解决方案中创建了一个 .Net Framework 项目,并添加了一个保存数据库信息的 EDMX。然后在不同的项目(服务项目或模型项目)中,我有 t4 模板来读取 EDMX 并根据数据库生成代码文件。
这些 T4 模板在 VS2019 中完美运行,我相信在 VS2022 中曾经可以运行(不能 100% 确定这一点),但是在最近更改数据库后,我尝试运行这些模板,但每次都开始看到此错误:
运行转换:System.Runtime.Serialization.SerializationException:在程序集“Microsoft.VisualStudio.ProjectSystem.VS.Implementation”中键入“Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProjectItem”,版本= 17.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a' 未标记为可序列化。
错误指向 EF6.Utility.CS.ttinclude 文件中的这一行:
templateProjectItem = dte.Solution.FindProjectItem(_textTransformation.Host.TemplateFile);
Run Code Online (Sandbox Code Playgroud)
如果我的 T4 模板位于 .Net Framework 项目中,它们可以正常工作,但 .Net 6.0 项目中的任何 T4 模板都会发生此错误。
有几件事:如果我调试 T4 模板而不是运行自定义工具,我就可以运行它们。另外,由于引发错误的代码位于每次 VS 更新时随实体框架工具安装的 EF6.Utility.CS.ttinclude 中,因此我无法对该文件进行任何更改。