Acumatica 用于更新屏幕的Soap web服务在登录时返回错误

Acumatica 用于更新屏幕的Soap web服务在登录时返回错误,acumatica,Acumatica,我有一个web服务可以在2019 R2中更新ProjectTask屏幕-它在旧版本(2018 R1之前)中工作正常,但现在它在登录时出错(下面代码的最后一行),如下所示: ProjectTasks.Screen projectTasksContext = new ProjectTasks.Screen(); projectTasksContext.Url = "https://<url here>/Soap/PM302000.asmx"

我有一个web服务可以在2019 R2中更新ProjectTask屏幕-它在旧版本(2018 R1之前)中工作正常,但现在它在登录时出错(下面代码的最后一行),如下所示:

            ProjectTasks.Screen projectTasksContext = new ProjectTasks.Screen();
            projectTasksContext.Url = "https://<url here>/Soap/PM302000.asmx";

            projectTasksContext.CookieContainer = new System.Net.CookieContainer();

            ProjectTasks.LoginResult projectTasksLoginResult = projectTasksContext.Login("<user>", "<password>");
ProjectTasks.Screen projectTasksContext=new ProjectTasks.Screen();
projectTasksContext.Url=”https:///Soap/PM302000.asmx";
projectTasksContext.CookieContainer=新系统.Net.CookieContainer();
ProjectTasks.LoginResult projectTasksLoginResult=projectTasksContext.Login(“,”);
以下是相关的错误消息,对我来说没有任何意义:

内部异常如下所示:

?例如内部异常 {“无法从传输连接读取数据:远程主机强制关闭了现有连接。”} 数据:{System.Collections.ListDictionaryInternal} HResult:-2146232800 帮助链接:空 InnerException:{“远程主机强制关闭了现有连接”} 消息:“无法从传输连接读取数据:远程主机已强制关闭现有连接。” 资料来源:“系统” StackTrace:“在System.Net.Sockets.NetworkStream.Read(字节[]缓冲区,Int32偏移量,Int32大小)\r\n在System.Net.FixedSizeReader.ReadPacket(字节[]缓冲区,Int32偏移量,Int32计数)\r\n在System.Net.Security.SSLSState.StartReceiveBlob(字节[]缓冲区,AsyncProtocolRequest asyncRequest)\r\n在System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken消息,AsyncProtocolRequest asyncRequest)\r\n在System.Net.Security.SslState.StartSendBlob(Byte[]传入,Int32计数,AsyncProtocolRequest asyncRequest)\r\n在System.Net.Security.SslState.ForceAuthentication(布尔receiveFirst,Byte[]缓冲区,AsyncProtocolRequest asyncRequest)\r\n位于System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)\r\n位于System.Net.TlsStream.CallProcessAuthentication(对象状态)\r\n位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔值preserveSyncCtx)\r\n位于System.Threading.ExecutionContext 在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx)处运行(ExecutionContext ExecutionContext,ContextCallback callback,Object state)\r\n在System.Net.TlsStream.ProcessAuthentication处运行(ExecutionContext ExecutionContext,ContextCallback callback,Object state)\r\n在System.Net.TlsStream.Write处运行(字节[])缓冲区、Int32偏移量、Int32大小)\r\n位于System.Net.PooledStream.Write(字节[]缓冲区、Int32偏移量、Int32大小)\r\n位于System.Net.ConnectStream.WriteHeaders(布尔异步) TargetSite:{Int32读取(字节[],Int32,Int32)}


有什么想法吗?2019 R2中有没有以前版本中没有的设置?Acumatica在通过HTTPS连接时不需要TLS 1.2。错误消息一点也不清楚,我第一次遇到这个问题时也有点困惑。更新版本的.NET Framework(4.6+)自动使用TLS 1.2,但旧版本并非如此

  • .NET 4.6及更高版本。支持TLS 1.2不需要做任何额外的工作,默认情况下它是受支持的
  • 支持.NET 4.5.TLS 1.2,但它不是默认协议。您需要选择使用它。以下代码将使TLS 1.2成为默认值,请确保在连接到安全资源之前执行它: ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12
  • .NET 4.0.TLS 1.2不受支持,但如果您有.NET 4.5(或更高版本)安装在系统上后,即使您的应用程序框架不支持TLS 1.2,您仍然可以选择TLS 1.2。唯一的问题是.NET 4.0中的SecurityProtocolType没有TLS1.2的条目,因此我们必须使用此枚举值的数字表示: ServicePointManager.SecurityProtocol=(SecurityProtocolType)3072
  • .NET 3.5或更低版本。不支持(*)TLS 1.2,并且没有解决方法。请将应用程序升级到更新版本的框架
资料来源:


如果出于任何原因,您无法重新编译应用程序,您可以使用一种方法强制.NET使用TLS 1.2

我在这里看不到解决方案…抱歉-也许我不清楚-我只是使用C应用程序使用Acumatica soap web服务。我不确定要使用什么框架。无论如何,如果我更改我的C#app的框架升级到了4.6,我得到了同样的错误。是的,我知道你正在使用一个web服务。发生错误的原因是无法建立安全连接。你是否在连接到Acumatica之前通过调用ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12来强制TLS 1.2?这是问题的一部分Acumatica应用程序认证要求也尚未获得web服务认证。在这里一开始就提到ServicePointManager.SecurityProtocol设置会立即解决问题。谢谢。