истекло время ожидания выполнения.время ожидания истекло до завершения операции или сервер не отвечает в C # - PullRequest
0 голосов
/ 20 сентября 2019

Я вызываю скрипт Python из C #, В скрипте Python мы вызываем процедуру SQL.Когда пользователь загружает файл, содержащий 2,4 миллиона записей.Он прекрасно вызывает Python-скрипт из C #, а затем Python, запускающий процедуру и получающий данные, успешно вставляет таблицу, но при возврате процесса снова в C # он показывает, что время ожидания ошибки истекло.период ожидания истек до завершения операции или сервер не отвечает в C #

Это работало нормально в течение одного года, неожиданно показывая эту ошибку пользователям, но данные были успешно добавлены в БД

Я не понимаю, почему это происходит.Недавно ip сервера был изменен, я не знаю, это может вызвать изменение настроек в IIS или проблемы с кодом

    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "C:/Program Files/Python 3.5/python.exe";
    //startInfo.FileName = "C:/Program Files (x86)/Python/python.exe";
    //startInfo.Arguments = "C:/PythonScripts/Test.py " + expat + " " + entity + " " + country;
    //startInfo.Arguments = HttpContext.Server.MapPath("~/PythonScripts/Test.py").ToString() + " " + expat + " " + entity + " " + country;

    startInfo.Arguments = "C:/inetpub/wwwroot/File_Upload/PythonScripts/Test.py" + expat + " " + entity + " " + country; 

    startInfo.Verb = "runas";
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardError = true;
    startInfo.RedirectStandardOutput = true;
    process.StartInfo = startInfo;
    bool t = process.Start();

    StreamReader myStreamReader = process.StandardError;
    string error = myStreamReader.ReadToEnd();

    StreamReader reader = process.StandardOutput;
    string output = reader.ReadToEnd();

    process.WaitForExit();
    process.Close();

Python-скрипт, вызывающий из c #

 import pandas as pd
    import pyodbc
    import numpy as np
    import sys
    #import time   



    try:
            expat = (sys.argv[1])
            entity = ""
            country = ""
            if(sys.argv[1] == "Local"):
                entity = sys.argv[2]
                country = sys.argv[3]


            #start_time = time.time()
            df = pd.read_excel("C:\PythonScripts\TestPayBook.xlsx")
            #df = pd.read_excel("C:\inetpub\wwwroot\File_Upload_Wind_Auth\PythonScripts\TestPayBook.xlsx")

            server = 'xxxxxxxx' 
            database = 'xxxxxx' 
            username = 'xxxxxx' 
            password = 'xxxxxxxx'

            cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password+';TDS_Version=7.2;autocommit=False')
            cursor = cnxn.cursor()  
            if expat == "Local":

                entityList = entity.split(',');
                query = "select Mapping_Column, Source_Column from Tb_Payroll_ExcelMapping where country = '"+ country +"'  and [ENTITY] in (" + ','.join( ('\'' + x + '\'') for x in entityList) + ")"

                cursor.execute(query)
                rows = cursor.fetchall()

                ColumnMapping = {}
                for row in rows:
                    ColumnMapping[row.Mapping_Column] = row.Source_Column

                newColumns = {}

                columns = list(df.columns.values)

                for x in columns:
                    if x in ColumnMapping:
                        newColumns[x] = ColumnMapping[x]

                df = df.rename(columns = newColumns) 

            values = {'EXIT DATE': '1900-01-01', 'DATE OF JOINING': '9999-01-01', 'DOB': '1900-01-01'}
            df = df.fillna(value=values)

            df1 = df.replace(np.nan, '', regex=True)

            df_melt = df1.melt(id_vars=['PAY YEAR','PAY MONTH','EMPLOYEE ID','NAME','COUNTRY','CATEGORY','GRADE','BAND','EXPAT/LOCAL',

                                    'GATP/NON GATP','DESIGNATION','LOCATION / ENTITY','GENDER',

                                    'DOB','AGE','DATE OF JOINING','TENURE','PRODUCT','COST CENTRE','EXIT STATUS',

                                    'EXIT DATE','EXIT REASON','CURRENCY','DEPARTMENT'])

            paymonthlist = df_melt.get("PAY MONTH").unique().tolist()
            payyearlist = df_melt.get("PAY YEAR").unique().tolist()
            paycountrylist = df_melt.get("COUNTRY").unique().tolist()
            paylocationlist = df_melt.get("LOCATION / ENTITY").unique().tolist()
            payexpatlist = df_melt.get("EXPAT/LOCAL").unique().tolist()


            cursor.fast_executemany = True 

            DeleteQuery = 'Delete from TB_PAYROLL_TRANS where [PAY MONTH] in ('+ ','.join( ('\'' + x + '\'') for x in paymonthlist) + ') and [PAY YEAR] in (' + ','.join(str(x) for x in payyearlist) + ') and COUNTRY in (' + ','.join( ('\'' + x + '\'') for x in paycountrylist) + ') and [LOCATION / ENTITY] in (' + ','.join( ('\'' + x + '\'') for x in paylocationlist) + ') and [EXPAT/LOCAL] in (' + ','.join( ('\'' + x + '\'') for x in payexpatlist) + ')'                 

            cursor.execute(DeleteQuery) 

            #print("DeleteQuery done")
            #print("--- %s seconds ---" % (time.time() - start_time))


            params = [tuple(x) for x in df_melt.values]

            BulkInsertQuery = '''Insert into TB_PAYROLL_TRANS_JUNC ([PAY YEAR], [PAY MONTH], [EMPLOYEE ID], NAME, COUNTRY, CATEGORY, GRADE, BAND, [EXPAT/LOCAL], [GATP/NON GATP] 
            ,DESIGNATION, [LOCATION / ENTITY], GENDER, DOB, AGE, [DATE OF JOINING], TENURE, PRODUCT, [COST CENTRE], [EXIT STATUS], [EXIT DATE], [EXIT REASON], CURRENCY,DEPARTMENT, variable, value )
            values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'''



            for i in range(0, len(params), 1000):
                    subTuple = tuple(params[i:i+1000])
                    cursor.executemany(BulkInsertQuery,subTuple)
                    #print("Insert done: ", end=" ")
                    #print(i)
                    #print("--- %s seconds ---" % (time.time() - start_time))

            #cursor.executemany(BulkInsertQuery,params)     

            #print("Insert done")
            #print("--- %s seconds ---" % (time.time() - start_time))

            cursor.execute("EXEC [TB_DATA_REPO].P_Payroll_Trans_Junction")

            cnxn.commit()


    except IOError:
            print('An error occured trying to upload the file.')



> execution timeout expired. the timeout period elapsed prior to
> completion of the operation or the server not responding in C#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...