SOAP服务 - 在同时请求期间带有响应的交叉线路?

时间:2018-02-12 23:23:23

标签: c# .net web-services soap

我的SOAP Web服务有一个奇怪的问题。

对于某些背景信息 - 我们有大约100-110个具有多个终端的不同位置,在某些时候可能会触及此特定端点 - 让我们称之为 Endpoint1 Endpoint1 的作用是为我们的某个合作伙伴调用Web服务,然后在我们自己的系统中调用几个数据库查询,以验证扫描的项目实际上位于它所说的位置,一些防欺诈代码等与手头的问题不太相关。对 Endpoint1 的呼叫通常需要5-20秒,具体取决于从呼叫该位置的互联网连接,通常是该范围的较低端。

问题在于,当两个或多个位置同时或几乎同时呼叫 Endpoint1 时,某些位置收到的响应不正确 - 具体而言,它们应该是应该响应的去其他地方之一。

E.g。

  • 位置A同时发送标识符 11235813 位置B发送标识符 21345589 。位置A是期待的 返回带有该序列号的项目的信息,以及位置B. 期待它的序列号相同。究竟是什么结果 发生的是位置A接收位置信息 B的项目,反之亦然。

由于我们在所有地点广泛部署了系统更新,因此过去一周发生过多次。当我们准确记录 Endpoint1 发送给合作伙伴网络服务的内容时,有时发送的标识符将完全不正确 - 即它会将位置A记录为已发送标识符 21345589 尽管位置A的日志显示已发送 11235813 。其他时候,它会显示为 11235813 ,但响应将是来自合作伙伴网络服务的 21345589 的信息。

此SOAP服务部署在Windows Server 2012 R2上的IIS8.5中。它是用.NET v4.5编写的,但应用程序池.NET CLR版本是4.0。只有一台服务器正在运行此代码 - 没有其他服务器或负载平衡。

以下是 Endpoint1 代码的相关开头部分。

[WebMethod(EnableSession = true, Description = "Endpoint1")]
        public service.Endpoint1ResponseObject Endpoint1(string param1, string param2, string Identifier, string param3,string locationNo, 
            string param4, string param5, string param6, string param7, string param8,string param9,
            string param10, string param11)
        {
            ...    
            service.Endpoint1ResponseObject response = new service.Endpoint1ResponseObject();
            try
            {
                response.SubObj1 = new service.SubObj1();
                response.SubObj2 = new service.SubObj2();
                response.SubObj3 = new service.SubObj3();
                response.SubObj4 = new service.SubObj4();
                if (//Identifier length/format validation)
                {
                    if (CheckParams(param1, param2))
                    {

                        Functional fn = new Functional();
                        locationNo = fn.CheckValidLocationNo(locationNo);
                        response.subObj4.Property1 = "";
                        Partner.PartnerRequest(locationNo, Identifier.Trim(), param3, param4, param5, param6, ref response);
                            ...etc.

所有响应子对象和响应对象本身都在 Endpoint1 的开头实例化 - 在包含此函数的主类中没有静态变量或类级变量。类定义是" service"的一部分。 class - 这些都是公开的,不是静态的。有时,只有 subObj4 的信息是错误的(合作伙伴网络服务信息),有时所有四个子对象都有不正确的信息。我还没有注意到一种模式。

我的问题是

  • 可能的原因是,请求似乎覆盖了同时发生的其他并发请求的变量/参数?我该如何解决这个问题?

如果需要更多信息,我将很乐意提供我所能提供的服务 - 此时已有几个不同的人参与了此代码。

我尝试过的事情

  1. 将应用程序池设置为具有5个工作线程的Web园(不起作用)

  2. 从Endpoint1删除所有日志记录到文件。理论是,一次写入一个文件的多个请求导致了这些问题。这是不久之前所以我不确定问题是否再次发生,因为它取决于我们在任何给定时间点在我们的位置发生了多少交易(更新:这也不起作用)

0 个答案:

没有答案