프로젝트

일반

사용자정보

개정판 0a64fa85

ID0a64fa85af724af5915efff4d7799d620e8b2258
상위 faf998c6
하위 65674874

김태성이(가) 약 2년 전에 추가함

issue #0000 convert service Dapper update

Change-Id: I02cd47be3839ceff08813bd022cb8e13cf534ba0

차이점 보기:

ConvertService/ServiceBase/Markus.Service.Convert/ConvertService.cs
154 154
#if PROCESS_TEST
155 155
                Console.WriteLine($"send wcf service {e.SaveItem.Status}  currentPage : {e.SaveItem.CurrentPage} error message : {(string.IsNullOrWhiteSpace(e.SaveItem.ErrorMessage)?"null":e.SaveItem.ErrorMessage)}");
156 156
#endif
157
                StationServiceClient.ConvertProcessState(e.SaveItem.Id, (int)e.SaveItem.Status, e.SaveItem.CurrentPage, e.SaveItem.TotalPages, e.SaveItem.ErrorMessage);
157
                StationServiceClient.ConvertProcessState(ConvertProcessContext.ConvertID, (int)e.SaveItem.Status, e.SaveItem.CurrentPage, e.SaveItem.TotalPages, e.SaveItem.ErrorMessage);
158 158

  
159 159
            }
160 160
            catch (Exception ex)
......
369 369

  
370 370
                                try
371 371
                                {
372
                                    string docinfoID = null;
373

  
372 374
                                    using (DOCINFORepository dOCINFORepository = new DOCINFORepository(ConvertProcessContext.ConnectionString))
373 375
                                    {
374
                                        var docinfoId = dOCINFORepository.CreateAsync(convertDocID: saveitem.Id, PageCount: result.PageInfoList.Count()).GetAwaiter().GetResult();
376
                                        docinfoID = dOCINFORepository.CreateAsync(convertDocID: saveitem.Id, PageCount: result.PageInfoList.Count()).GetAwaiter().GetResult();
377
                                    }
375 378

  
379
                                    if (docinfoID != null)
380
                                    {
376 381
                                        using (DOCPAGERepository database = new DOCPAGERepository(ConvertProcessContext.ConnectionString))
377 382
                                        {
378 383
                                            var docPageList = result.PageInfoList.Select(f => new DOCPAGE
379 384
                                            {
380
                                                DOCINFO_ID = docinfoId,
385
                                                DOCINFO_ID = docinfoID,
381 386
                                                PAGE_ANGLE = 0,
382 387
                                                PAGE_WIDTH = f.Width.ToString(),
383 388
                                                PAGE_HEIGHT = f.Height.ToString(),
......
386 391

  
387 392
                                            docSetResult = database.CreateAsync(docPageList).GetAwaiter().GetResult();
388 393
                                        }
389
                                    }
390

  
391
                                    saveitem.CurrentPage = result.PageInfoList.Max(x => x.PageNo);
392 394

  
395
                                        saveitem.CurrentPage = result.PageInfoList.Max(x => x.PageNo);
396
                                    }
397
                                    else
398
                                    {
399
                                        result.StatusCode = StatusCodeType.Error;
400
                                        result.Message += LogHelper.GetStack() + " " + $"DocInfo Insert Error.";
401
                                    }
393 402
                                }
394 403
                                catch (Exception ex)
395 404
                                {
ConvertService/ServiceBase/Markus.Service.ConvertProcess/Markus.Service.ConvertProcess.csproj
14 14
    <NuGetPackageImportStamp>
15 15
    </NuGetPackageImportStamp>
16 16
    <TargetFrameworkProfile />
17
    <IsWebBootstrapper>false</IsWebBootstrapper>
17 18
    <PublishUrl>게시\</PublishUrl>
18 19
    <Install>true</Install>
19 20
    <InstallFrom>Disk</InstallFrom>
......
26 27
    <MapFileExtensions>true</MapFileExtensions>
27 28
    <ApplicationRevision>0</ApplicationRevision>
28 29
    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
29
    <IsWebBootstrapper>false</IsWebBootstrapper>
30 30
    <UseApplicationTrust>false</UseApplicationTrust>
31 31
    <BootstrapperEnabled>true</BootstrapperEnabled>
32 32
  </PropertyGroup>
......
229 229
)</PreBuildEvent>
230 230
  </PropertyGroup>
231 231
  <PropertyGroup>
232
    <PostBuildEvent>rem "$(Obfuscar)" obfuscar.xml</PostBuildEvent>
232
    <PostBuildEvent>if $(ConfigurationName) == ReleaseAll (
233
"$(Obfuscar)" obfuscar.xml
234
)</PostBuildEvent>
233 235
  </PropertyGroup>
234 236
</Project>
ConvertService/ServiceBase/Markus.Service.ConvertProcess/obfuscar.xml
6 6
  <Module file="$(InPath)\Markus.Service.ConvertProcess.exe" />
7 7
  <Module file="$(InPath)\Markus.Service.Extensions.dll" />
8 8
  <Module file="$(InPath)\Markus.Service.Convert.dll" />
9
  <Module file="$(InPath)\Markus.Service.DataBase.dll" />
10 9
</Obfuscator>
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Entities/ConvertDoc.cs
9 9
	[DataContract]
10 10
	public class ConvertDoc
11 11
	{
12
		public ConvertDoc()
13
        {
14

  
15
        }
16

  
17
		public ConvertDoc(string id, string project_no, string document_url, string document_id, DateTime create_datetime
18
			, int status, int total_page, int current_page, int reconverter, string exception, DateTime end_datetime
19
			, DateTime start_datetime, string service_id)
20
		{
21
			this.ID = id;
22
			this.PROJECT_NO = project_no;
23
			this.DOCUMENT_URL = document_url;
24
			this.DOCUMENT_ID = document_id;
25
			this.CREATE_DATETIME = create_datetime;
26
			this.STATUS = status;
27
			this.TOTAL_PAGE = total_page;
28
			this.CURRENT_PAGE = current_page;
29
			this.RECONVERTER = reconverter;
30
			this.EXCEPTION = exception;
31
			this.END_DATETIME = end_datetime;
32
			this.START_DATETIME = start_datetime;
33
			this.SERVICE_ID = service_id;
34
        }
35

  
12 36
		[Key]
13 37
		[MaxLength(50)]
14 38
		[DataMember]
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Markus.Service.DataBase.Dapper.csproj
65 65
    <LangVersion>7.3</LangVersion>
66 66
    <ErrorReport>prompt</ErrorReport>
67 67
  </PropertyGroup>
68
  <PropertyGroup>
69
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
70
  </PropertyGroup>
68 71
  <ItemGroup>
69 72
    <Reference Include="System" />
70 73
    <Reference Include="System.ComponentModel.DataAnnotations" />
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Repositories/BaseRepository.cs
73 73
            var parameter = new DynamicParameters();
74 74
            parameters.ForEach(x => parameter.Add(x.Name, x.Value, x.DbType));
75 75

  
76
            return await Connection.QueryFirstAsync<T>(SQL, parameter);
76
            return await Connection.QueryFirstOrDefaultAsync<T>(SQL, parameter);
77 77
        }
78 78

  
79 79
        public async Task<int> SetAsync(string SQL, List<sqlParameter> parameters)
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Repositories/ConvertDocRepository.cs
69 69

  
70 70
			SQL = SQL + string.Join(" AND ", whereSQL.ToArray());
71 71

  
72
			var convertItem = await Connection.QueryFirstAsync<Markus.Service.DataBase.Entities.ConvertDoc>(SQL, parameters);
72
			var convertItem = await Connection.QueryFirstOrDefaultAsync<Markus.Service.DataBase.Entities.ConvertDoc>(SQL, parameters);
73 73

  
74
            using (PROPERTIESRepository repository = new PROPERTIESRepository(connectionString))
75
            {
76
                var propeties = await repository.GetFirstAsync(convertItem.PROJECT_NO, PropertiesTypeDefine.TILE_SOURCE_STORAGE);
77

  
78
                if (propeties != null)
79
                {
80
                    convertItem.ConvertPath = CreateConvertPath.Get(propeties.VALUE, convertItem.PROJECT_NO, convertItem.DOCUMENT_ID);
81
                }
82
                else
83
                {
84
                    throw new Exception($"Get {convertItem.PROJECT_NO} is {PropertiesTypeDefine.TILE_SOURCE_STORAGE} null Error");
85
                }
86
            }
74
			if (convertItem != null)
75
			{
76
				using (PROPERTIESRepository repository = new PROPERTIESRepository(connectionString))
77
				{
78
					var propeties = await repository.GetFirstAsync(convertItem.PROJECT_NO, PropertiesTypeDefine.TILE_SOURCE_STORAGE);
79

  
80
					if (propeties != null)
81
					{
82
						convertItem.ConvertPath = CreateConvertPath.Get(propeties.VALUE, convertItem.PROJECT_NO, convertItem.DOCUMENT_ID);
83
					}
84
					else
85
					{
86
						throw new Exception($"Get {convertItem.PROJECT_NO} is {PropertiesTypeDefine.TILE_SOURCE_STORAGE} null Error");
87
					}
88
				}
89
			}
87 90

  
88 91
            return convertItem;
89 92

  
......
167 170
		public async Task<string> CreateAsync(string PROJECT_NO,string DOCUMENT_URL,string DOCUMENT_ID)
168 171
		{
169 172
			string result = null;
170
			
171
			var parameters = new DynamicParameters();
172
			//parameters.Add("@ID", ID, DbType.String);
173
			parameters.Add("@PROJECT_NO", PROJECT_NO, DbType.String);
174
			parameters.Add("@DOCUMENT_URL", DOCUMENT_URL, DbType.String);
175
			parameters.Add("@DOCUMENT_ID", DOCUMENT_ID, DbType.String);
173
            try
174
			{
175
				var tran = Connection.BeginTransaction();
176 176

  
177
			result = await Connection.QuerySingleAsync<string>("dbo.CONVERT_INSERT_CONVERTDOC", parameters, commandType: CommandType.StoredProcedure);
177
				var parameters = new DynamicParameters();
178
				parameters.Add("@PROJECT_NO", PROJECT_NO, DbType.String);
179
				parameters.Add("@DOCUMENT_URL", DOCUMENT_URL, DbType.String);
180
				parameters.Add("@DOCUMENT_ID", DOCUMENT_ID, DbType.String);
181
				parameters.Add("@NewID", dbType: DbType.String, direction: ParameterDirection.Output,size:50);
182

  
183
				await Connection.ExecuteAsync("dbo.CONVERT_INSERT_CONVERTDOC", parameters,transaction: tran, commandType: CommandType.StoredProcedure);
184
				
185
				result = parameters.Get<string>("@NewID");
186
				tran.Commit();
187
			}
188
			catch (Exception)
189
            {
178 190

  
191
                throw;
192
            }
179 193
			return result;
180 194
		}
181 195

  
182 196
		public async Task<int> UpdateStatusAsync(string ServiceID, string ConvertDocID, int status,int totalPage,int currentPage,string exception)
183 197
		{
184 198
			int result = 0;
199
		
200
			var tran = Connection.BeginTransaction();
185 201

  
186 202
			var parameters = new DynamicParameters();
187 203
			parameters.Add("@SERVICE_ID", ServiceID, DbType.String);
......
191 207
			parameters.Add("@CURRENT_PAGE", currentPage, DbType.Int32);
192 208
			parameters.Add("@EXCEPTION", exception, DbType.String);
193 209
				
194
			result = await  Connection.ExecuteAsync("dbo.CONVERT_UPDATE_STATUS", parameters, commandType: CommandType.StoredProcedure);
195

  
210
			result = await  Connection.ExecuteAsync("dbo.CONVERT_UPDATE_STATUS", parameters, transaction: tran, commandType: CommandType.StoredProcedure);
211
			tran.Commit();
196 212
			return result;
197 213
		}
198 214

  
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Repositories/DOCINFORepository.cs
27 27
			var tran = Connection.BeginTransaction();
28 28

  
29 29
			var parameters = new DynamicParameters();
30
			parameters.Add("@CONVERTDOC_ID", convertDocID, DbType.String);
30
			parameters.Add("@CONVERT_ID", convertDocID, DbType.String);
31 31
			parameters.Add("@PAGE_COUNT", PageCount, DbType.Int32);
32
			parameters.Add("@NewID", dbType: DbType.String, direction: ParameterDirection.Output, size: 50);
33
			parameters.Add("@ErrorCode", dbType: DbType.Int32, direction: ParameterDirection.Output);
34
			parameters.Add("@Error", dbType: DbType.String, direction: ParameterDirection.Output, size: 500);
32 35

  
33
			result = await Connection.QuerySingleAsync<string>("dbo.CONVERT_INSERT_DOCINFO", parameters, tran, commandType: CommandType.StoredProcedure);
34
			tran.Commit();
36
			await Connection.ExecuteAsync("dbo.CONVERT_INSERT_DOCINFO", parameters, tran, commandType: CommandType.StoredProcedure);
37
			
38
			var errorCode = parameters.Get<int>("@ErrorCode");
39
			var error = parameters.Get<string>("@Error");
35 40

  
41
			if (errorCode > 0)
42
			{
43
				tran.Rollback();
44
				throw new Exception(error);
45
			}
46
			else
47
			{
48
				result = parameters.Get<string>("@NewID");
49
				tran.Commit();
50
			}
51
			
36 52
			return result;
37 53
		}
38

  
39

  
40 54
	}
41 55
}
42 56

  
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Repositories/DOCUMENTITEMRepository.cs
30 30
			parameter.Add("@PROJECT_NO", projectNo, System.Data.DbType.String);
31 31
			parameter.Add("@DOCUMENT_ID", documentID, System.Data.DbType.String);
32 32
		
33
			return await Connection.QueryFirstAsync<DOCUMENTITEM>(SQL,parameter);
33
			return await Connection.QueryFirstOrDefaultAsync<DOCUMENTITEM>(SQL,parameter);
34 34
		}
35 35

  
36 36
		/// <summary>
......
55 55
			parameter.Add("@RESULT_FILE", documentItem.RESULT_FILE, DbType.String);
56 56
			parameter.Add("@RESULT", documentItem.RESULT, DbType.String);
57 57
			parameter.Add("@GROUP_NO", documentItem.GROUP_NO, DbType.String);
58
			parameter.Add("@NewID", dbType: DbType.String, direction: ParameterDirection.Output, size: 50);
58 59

  
59
			result = await Connection.QuerySingleAsync<string>("dbo.CONVERT_INSERT_DOCUMENTITEM", parameter, tran, commandType: CommandType.StoredProcedure);
60
			await Connection.ExecuteAsync("dbo.CONVERT_INSERT_DOCUMENTITEM", parameter, tran, commandType: CommandType.StoredProcedure);
61

  
62
			result = parameter.Get<string>("@NewID");
60 63

  
61 64
			tran.Commit();
62 65

  
ConvertService/ServiceBase/Markus.Service.DataBase.Dapper/Repositories/PROPERTIESRepository.cs
44 44
			parameters.Add("@PROPERTY", PROPERTY, System.Data.DbType.String);
45 45
			parameters.Add("@TYPE", TYPE, System.Data.DbType.String);
46 46

  
47
			return await Connection.QueryFirstAsync<PROPERTIES>(SQL, parameters);
47
			return await Connection.QueryFirstOrDefaultAsync<PROPERTIES>(SQL, parameters);
48 48
		}
49 49
	}
50 50
}
ConvertService/ServiceBase/Markus.Service.Station/Markus.Service.Station.csproj
115 115
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
116 116
    <Prefer32Bit>true</Prefer32Bit>
117 117
  </PropertyGroup>
118
  <PropertyGroup>
119
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
120
  </PropertyGroup>
118 121
  <ItemGroup>
119 122
    <Reference Include="System" />
120 123
    <Reference Include="System.Activities" />
......
130 133
    <Reference Include="System.Xaml" />
131 134
    <Reference Include="System.Xml.Linq" />
132 135
    <Reference Include="System.Data.DataSetExtensions" />
133
    <Reference Include="Microsoft.CSharp" />
134 136
    <Reference Include="System.Data" />
135 137
    <Reference Include="System.Net.Http" />
136 138
    <Reference Include="System.ServiceProcess" />
......
270 272
)</PreBuildEvent>
271 273
  </PropertyGroup>
272 274
  <PropertyGroup>
273
    <PostBuildEvent>"$(Obfuscar)" obfuscar.xml</PostBuildEvent>
275
    <PostBuildEvent>if $(ConfigurationName) == ReleaseAll (
276
"$(Obfuscar)" obfuscar.xml
277
)</PostBuildEvent>
274 278
  </PropertyGroup>
275 279
</Project>
ConvertService/ServiceBase/Markus.Service.Station/Plugin.ini
13 13

  
14 14
[ErrorNotice]
15 15
MARKUS_ConnectionString = ScTg8MgTdbARVQXhb1K9YI3/6emjnMuODvTWZ+UnUZQ8z/Gv4TksSLRn84HTZiC5q/RkHKkgbsc6TL5EdTsnSwK0ngDgXD0P0yPKObgtPfk0MX0wmEG95SDQzGzbT6sH73Lkzde0AeChQWveAWZGvACoQISpdUwNj96c2AQuTqaUHwSkCwSI84HZCYugjlg3gAF1FpPggKCIeu4r/qFi0w==
16
NoticeStatus = 4,50,55,60,70,77,99
16
NoticeStatus = 50,55,60,70,77,99
17 17
SMTP_SERVER = outbound.daouoffice.com
18 18
SMTP_SERVER_PORT = 25
19 19
IS_SMTP_SERVER_SSL = true
ConvertService/ServiceBase/Markus.Service.Station/ServiceStation.cs
7 7
using Markus.Service.WcfService;
8 8
using Salaros.Configuration;
9 9
using System;
10
using System.Collections;
10 11
using System.Collections.Generic;
11 12
using System.ComponentModel;
12 13
using System.Data;
......
63 64
        /// 프로세스 카운터 자주 람다식을 사용해서 list<int>로 함.
64 65
        /// </summary>
65 66
        private List<Int64> ProcessorAffinityList;
67
        private Int64 DefaultAffinity;
66 68

  
67 69
        private string configFileName;
68 70

  
......
268 270
            int processCount = Environment.ProcessorCount;
269 271
            int AffinityScope = processCount;
270 272

  
271
            if (processCount > ServiceProperty.PROCESS_COUNT)
272
            {
273
                AffinityScope = processCount / ServiceProperty.PROCESS_COUNT;
274
            }
273
            //Process 자동 배분 
274
            DefaultAffinity = GetAffinityMask(processCount, processCount);
275 275

  
276 276
            long affinityMask = 0;
277 277

  
278 278
            while (ProcessorAffinityList.Count() < ServiceProperty.PROCESS_COUNT)
279

  
280
            for (int i = ServiceProperty.PROCESS_COUNT; i > 0; i--)
279 281
            {
280
                if(affinityMask <= 1)
281
                {
282
                    affinityMask = 1 << (processCount - 1);
283
                }
284
                else
282
                affinityMask = GetAffinityMask(processCount, i);
283

  
284
                if (Environment.UserInteractive)
285 285
                {
286
                    affinityMask = affinityMask >>1;
286
                    Console.WriteLine($"index{string.Format("{0:D2}", ProcessorAffinityList.Count())} - {longToBinaryString(affinityMask)}");
287 287
                }
288 288

  
289 289
                ProcessorAffinityList.Add(affinityMask);
290 290
            }
291
        }
291 292

  
292
//            for (int i = 0; i < AffinityScope; i += AffinityScope)
293
//            {
294
//                var bits = new int[processCount];
293
        private static long GetAffinityMask(int processCount, int index)
294
        {
295
            BitArray bitArray = new BitArray(processCount);
295 296

  
296
//                for (int j = i; j < i + AffinityScope; j++)
297
//                {
298
//                    bits[j] = 1;
299
//                }
297
            if (processCount - 1 < index)
298
            {
299
                bitArray = new BitArray(processCount, true);
300
            }
301
            else
302
            {
303
                bitArray.Set(index, true);
304
            }
300 305

  
301
//                var affinity = System.Convert.ToInt64(string.Join("", bits), 2);
306
            var bits = bitArray.Cast<bool>().Select(bit => bit ? 1 : 0);
302 307

  
303
//#if DEBUG
304
//                List<int> test = bits.ToList();
305
//                test.Reverse();
306
//               System.Diagnostics.Debug.WriteLine($"index{string.Format("0#",i)} - {string.Join("", test)}");
307
//#endif
308
//                ProcessorAffinityList.Add(affinity);
309
//            }
308
            return System.Convert.ToInt64(string.Join("", bits), 2);
309
        }
310
        private static string longToBinaryString(long value)
311
        {
312
            string binary = Convert.ToString(value, 2);
313
            return binary.PadLeft(64, '0');
310 314
        }
311 315

  
312 316
        public void StartService()
ConvertService/ServiceBase/Markus.Service.Station/ServiceStation.ini
1 1
[SERVICE]
2
WINDOW = true
2
WINDOW = false
3 3
IS_STATAION = true
4 4

  
5
#IS_STATAION이 false인 경우 STATAION_ADDRESS를 명시.
6
#IS_STATAION는 위성 station으로 main에서 받아서 처리함.
5 7
STATAION_ADDRESS = http://localhost:9991/StationService
6 8

  
7 9
SERVICE_ID = 03A98B3B-ECCD-4972-B658-43C7571965DA
8
# 구분자는 ','
10
# 설정된 ID의 SERVICE_PROPERTIES를 가져온다.
11
#구분자는 ','
9 12
SERVICE_LIST =
10 13

  
11 14
# DAELIM
ConvertService/ServiceBase/Markus.Service.Station/StationService/ServiceStationTask.cs
34 34
            bool result = false;
35 35
            try
36 36
            {
37
           
38 37
                Process ConvertProcess = new Process();
39 38

  
40 39
                ProcessContext processSendData = new ProcessContext
......
54 53
                };
55 54

  
56 55
                var sendData = ObjectToBytesStringConvert.ObjectToBytesString(processSendData);
57
                var convertPath = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Convert\\Markus.Service.ConvertProcess.exe");
56
                var convertPath = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Convert");
58 57

  
59 58
                ProcessStartInfo startInfo = new ProcessStartInfo
60 59
                {
61 60
                    UseShellExecute = false,
62
                    FileName = convertPath,
61
                    FileName = System.IO.Path.Combine(convertPath, "Markus.Service.ConvertProcess.exe"),
63 62
                    WindowStyle = ProcessWindowStyle.Hidden,
64 63
                    CreateNoWindow = true,
65 64
                    ErrorDialog = false,
66 65
                    RedirectStandardError = false,
66
                    WorkingDirectory = convertPath,
67 67
                    Arguments = $"{convertitem.ID.ToString()} {AESEncrypter.Encrypt(sendData)}"
68 68
                    //Arguments = $"{convertitem.ConvertID.ToString()} {convertitem.ProjectNumber} {AESEncrypter.Encrypt(MarkusDBConnectionString)} {gServiceHostAddress} {DownloadTempFolder} {MultiThreadMaxPages}"
69 69
                };
......
96 96
                        }
97 97
                        else
98 98
                        {
99
                            // 모두 사용중일때 점유율이 작은 걸로 사용
100
                            var CurrentProcessAffinity = AliveConvertQueue.Where(x=>x.ProcessorAffinity > 0).Select(f => f.ProcessorAffinity).Distinct();
101

  
102
                            currentAffinity = CurrentProcessAffinity.Min();
103
                            ConvertProcess.ProcessorAffinity = new IntPtr(currentAffinity);
99
                            ConvertProcess.ProcessorAffinity = new IntPtr(DefaultAffinity);
104 100

  
105 101
                            logger.Info($"convert process Affinity All use {currentAffinity} :  ConvertDoc ID:{convertitem.ID}");
106

  
107 102
                        }
108 103

  
109 104
                        var item = AliveConvertQueue.Find(x => x.Equals(convertitem));
......
291 286
                {
292 287
                    try
293 288
                    {
294
                        subservice.IsOnline = await SytemNet.PingAsync(subservice.Properties.SERVICE_ADDRESS);
295

  
296
                        if (subservice.IsOnline)
289
                        if (subservice.Properties.ID == this.ServiceProperty.ID)
297 290
                        {
298
                            var alivelist = await subservice.Service.AliveConvertListAsync();
299

  
300
                            subservice.ConvertItems = alivelist.Cast<ConvertDoc>().ToList();
301
                            subservice.AliveCount = alivelist.Count();
291
                            subservice.ConvertItems = this.AliveConvertList();
292
                            subservice.AliveCount = this.AliveConvertList().Count();
302 293
                        }
303 294
                        else
304 295
                        {
305
                            logger.Error($"Connection Error {subservice.Properties.SERVICE_ADDRESS}");
306
                            subservice.ConvertItems = new List<ConvertDoc>();
307
                            subservice.AliveCount = subservice.Properties.PROCESS_COUNT;
296
                            subservice.IsOnline = await SytemNet.PingAsync(subservice.Properties.SERVICE_ADDRESS);
297

  
298
                            if (subservice.IsOnline)
299
                            {
300
                                var alivelist = await subservice.Service.AliveConvertListAsync();
301

  
302
                                subservice.ConvertItems = alivelist.Select(x => 
303
                                                        new ConvertDoc(x.ID, x.PROJECT_NO, x.DOCUMENT_URL, x.DOCUMENT_ID, 
304
                                                        x.CREATE_DATETIME, x.STATUS, x.TOTAL_PAGE, x.CURRENT_PAGE,
305
                                                        x.RECONVERTER, x.EXCEPTION, x.END_DATETIME, x.START_DATETIME, x.SERVICE_ID)
306
                                                        ).ToList();
307

  
308
                                subservice.AliveCount = alivelist.Count();
309
                            }
310
                            else
311
                            {
312
                                logger.Error($"Connection Error {subservice.Properties.SERVICE_ADDRESS}");
313
                                subservice.ConvertItems = new List<ConvertDoc>();
314
                                subservice.AliveCount = subservice.Properties.PROCESS_COUNT;
315
                            }
308 316
                        }
309 317

  
310 318
                        result = true;
......
381 389
            }
382 390
            catch (Exception ex)
383 391
            {
384
                logger.Error($"setDataBaseWaitingList", ex);
392
                logger.Error($"PassConvertItem", ex);
385 393
            }
386 394
        }
387 395

  
......
449 457
                    foreach (var item in StationServiceList.Where(x => x.IsOnline))
450 458
                    {
451 459
                        var serviceItems = await item.Service.AliveConvertListAsync();
452
                        aliveItems.AddRange(serviceItems.Cast<ConvertDoc>());
460

  
461
                        var convertDocItems = serviceItems.Select(x => new ConvertDoc(x.ID, x.PROJECT_NO, x.DOCUMENT_URL, x.DOCUMENT_ID,
462
                                                        x.CREATE_DATETIME, x.STATUS, x.TOTAL_PAGE, x.CURRENT_PAGE,
463
                                                        x.RECONVERTER, x.EXCEPTION, x.END_DATETIME, x.START_DATETIME, x.SERVICE_ID));
464

  
465

  
466
                        aliveItems.AddRange(convertDocItems);
453 467
                    }
454 468

  
455
                    if (aliveItems.Count() > 0)
456
                    {
457
                        logger.Warn($"aliveItems  : {string.Join(",",aliveItems.Select(x=>x.ID))}");
469
                    //if (aliveItems.Count() > 0)
470
                    //{
471
                    //logger.Warn($"aliveItems  : {string.Join(",",aliveItems.Select(x=>x.ID))}");
458 472

  
459 473
                        foreach (var item in items)
460 474
                        {
......
465 479
                                repository.SetCleanUpItemAsync(item.ID, 0).GetAwaiter().GetResult();
466 480
                            }
467 481
                        }
468
                    }
482
                    //}
469 483
             
470 484
                }
471 485
            }
......
544 558
                        ReleaseItems();
545 559
                    }
546 560
                }
547
                else
548
                {
549
                    if (StationClient != null)
550
                    {
551
                       await  StationClient.ReleaseConvertItemsAsync();
552
                    }
553
                }
561
                //else
562
                //{
563
                //    if (StationClient != null)
564
                //    {
565
                //       await  StationClient.ReleaseConvertItemsAsync();
566
                //    }
567
                //}
554 568
                //if (ServiceStation.AliveConvertQueue.Count() < MultiProcessCount)
555 569
                //{
556 570
                //    setDataBaseWaitingList();
ConvertService/ServiceBase/Markus.Service.Station/StationService/ServiceStationWCF.cs
107 107
            {
108 108
                using (ConvertDocRepository database = new ConvertDocRepository(MarkusDBConnectionString))
109 109
                {
110
                    var convertItem = database.GetConvertDocSingleAsync(ProjectNo: ProjectNo, DocumentID: DocumentID).GetAwaiter().GetResult();
110
                    //var convertItem = database.GetConvertDocSingleAsync(ProjectNo: ProjectNo, DocumentID: DocumentID).GetAwaiter().GetResult();
111 111

  
112
                    if (convertItem != null)
112
                    //if (convertItem != null)
113
                    //{
114
                    var newConvertDocId = database.CreateAsync(ProjectNo, originfilePath, DocumentID).GetAwaiter().GetResult();
115

  
116
                    if (newConvertDocId == null)
113 117
                    {
114
                        var newConvertDocId = database.CreateAsync(ProjectNo, originfilePath, DocumentID).GetAwaiter().GetResult();
118
                        logger.Error($"Set Convert document Insert Error - createId is Null. ProjectNo:{ProjectNo} originfilePath:{originfilePath} DocumentID:{DocumentID}");
119
                    }
120
                    else
121
                    {
122
                        var aliveItems = AliveConvertQueue.Where(x => x.DOCUMENT_ID == DocumentID);
115 123

  
116
                        if (newConvertDocId == null)
124
                        if (aliveItems.Count() == 0)
117 125
                        {
118
                            logger.Error($"Set Convert document Insert Error - createId is Null. ProjectNo:{ProjectNo} originfilePath:{originfilePath} DocumentID:{DocumentID}");
126
                            result = ConvertProcessAdd(ProjectNo, newConvertDocId);
119 127
                        }
120 128
                        else
121 129
                        {
122
                            var aliveItems = AliveConvertQueue.Where(x => x.DOCUMENT_ID == convertItem.DOCUMENT_ID);
123

  
124
                            if (aliveItems.Count() == 0)
125
                            {
126
                                result = ConvertProcessAdd(ProjectNo, newConvertDocId);
127
                            }
128
                            else
129
                            {
130
                                logger.Info("ConvertMenualAdd Wait ProjectNo:{ ProjectNo} originfilePath: { originfilePath} DocumentID: { DocumentID}");
131
                            }
132

  
133
                            result = true.ToString();
130
                            logger.Info("ConvertMenualAdd Wait ProjectNo:{ ProjectNo} originfilePath: { originfilePath} DocumentID: { DocumentID}");
134 131
                        }
132

  
133
                        result = true.ToString();
135 134
                    }
135
                    //}
136 136
                }
137 137
            }
138 138
            catch (Exception ex)
......
282 282
        /// <returns></returns>
283 283
        public bool ConvertProcessState(string ConvertDocID, int status, int CurrentPage, int TotalPage, string Error)
284 284
        {
285
            bool isStatusChange = false;
286

  
285 287
            if (AliveConvertQueue.Count() > 0)
286 288
            {
287 289
                var items = AliveConvertQueue.Where(x => x.ID == ConvertDocID);
......
292 294

  
293 295
                    item.TOTAL_PAGE = TotalPage;
294 296
                    item.CURRENT_PAGE = CurrentPage;
295
                    item.STATUS = status;
297

  
298
                    if (item.STATUS != status)
299
                    {
300
                        item.STATUS = status;
301
                        isStatusChange = true;
302
                    }
296 303
                }
297 304
            }
298 305
            
299
            if (CurrentPage % SaveStatusInterval == 0 || !Error.IsNullOrEmpty())
306
            if (isStatusChange || CurrentPage % SaveStatusInterval == 0 || !Error.IsNullOrEmpty())
300 307
            {
301 308
                using (ConvertDocRepository database = new ConvertDocRepository(MarkusDBConnectionString))
302 309
                {
......
405 412
            bool result = false;
406 413
            try
407 414
            {
408
                gWcfServiceHost.Abort();
415
                if (gWcfServiceHost != null)
416
                {
417
                    gWcfServiceHost.Abort();
418
                }
419

  
409 420
                result = true;
410 421
            }
411 422
            catch (Exception ex)
ConvertService/ServiceBase/Markus.Service.Station/obfuscar.xml
5 5
  <Var name="HidePrivateApi" value="true" />
6 6
  <Module file="$(InPath)\Markus.Service.Station.exe"/>
7 7
  <Module file="$(InPath)\Markus.Service.Extensions.dll" />
8
  <!----> <Module file="$(InPath)\Markus.Service.DataBase.Dapper.dll" />
8
  <Module file="$(InPath)\Markus.Service.DataBase.Dapper.dll" />
9 9
</Obfuscator>
ConvertService/ServiceBase/Markus.Service.StationConsole/Markus.Service.StationConsole.csproj
77 77
    <ErrorReport>prompt</ErrorReport>
78 78
  </PropertyGroup>
79 79
  <PropertyGroup>
80
    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
80
    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
81 81
  </PropertyGroup>
82 82
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseAll_XI|AnyCPU'">
83 83
    <OutputPath>bin\ReleaseAll_XI\</OutputPath>
ConvertService/ServiceBase/Markus.Service.WcfClient/Connected Services/StationServiceAsync/Markus.Service.DataBase.Entities.xsd
1
<?xml version="1.0" encoding="utf-8"?>
2
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/Markus.Service.DataBase.Entities" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Markus.Service.DataBase.Entities" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
  <xs:complexType name="ArrayOfConvertDoc">
4
    <xs:sequence>
5
      <xs:element minOccurs="0" maxOccurs="unbounded" name="ConvertDoc" nillable="true" type="tns:ConvertDoc" />
6
    </xs:sequence>
7
  </xs:complexType>
8
  <xs:element name="ArrayOfConvertDoc" nillable="true" type="tns:ArrayOfConvertDoc" />
9
  <xs:complexType name="ConvertDoc">
10
    <xs:sequence>
11
      <xs:element minOccurs="0" name="CREATE_DATETIME" type="xs:dateTime" />
12
      <xs:element minOccurs="0" name="CURRENT_PAGE" type="xs:int" />
13
      <xs:element minOccurs="0" name="ConvertPath" nillable="true" type="xs:string" />
14
      <xs:element minOccurs="0" name="DOCUMENT_ID" nillable="true" type="xs:string" />
15
      <xs:element minOccurs="0" name="DOCUMENT_URL" nillable="true" type="xs:string" />
16
      <xs:element minOccurs="0" name="END_DATETIME" type="xs:dateTime" />
17
      <xs:element minOccurs="0" name="EXCEPTION" nillable="true" type="xs:string" />
18
      <xs:element minOccurs="0" name="ID" nillable="true" type="xs:string" />
19
      <xs:element minOccurs="0" name="PROJECT_NO" nillable="true" type="xs:string" />
20
      <xs:element minOccurs="0" name="RECONVERTER" type="xs:int" />
21
      <xs:element minOccurs="0" name="SERVICE_ID" nillable="true" type="xs:string" />
22
      <xs:element minOccurs="0" name="START_DATETIME" type="xs:dateTime" />
23
      <xs:element minOccurs="0" name="STATUS" type="xs:int" />
24
      <xs:element minOccurs="0" name="TOTAL_PAGE" type="xs:int" />
25
    </xs:sequence>
26
  </xs:complexType>
27
  <xs:element name="ConvertDoc" nillable="true" type="tns:ConvertDoc" />
28
</xs:schema>
ConvertService/ServiceBase/Markus.Service.WcfClient/Connected Services/StationServiceAsync/Markus.Service.WcfClient.StationServiceAsync.ConvertDoc.datasource
1
<?xml version="1.0" encoding="utf-8"?>
2
<!--
3
    This file is automatically generated by Visual Studio .Net. It is 
4
    used to store generic object data source configuration information.  
5
    Renaming the file extension or editing the content of this file may   
6
    cause the file to be unrecognizable by the program.
7
-->
8
<GenericObjectDataSource DisplayName="ConvertDoc" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
9
   <TypeInfo>Markus.Service.WcfClient.StationServiceAsync.ConvertDoc, Connected Services.StationServiceAsync.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
10
</GenericObjectDataSource>
ConvertService/ServiceBase/Markus.Service.WcfClient/Connected Services/StationServiceTask/Markus.Service.DataBase.Entities.xsd
1
<?xml version="1.0" encoding="utf-8"?>
2
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/Markus.Service.DataBase.Entities" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Markus.Service.DataBase.Entities" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
  <xs:complexType name="ArrayOfConvertDoc">
4
    <xs:sequence>
5
      <xs:element minOccurs="0" maxOccurs="unbounded" name="ConvertDoc" nillable="true" type="tns:ConvertDoc" />
6
    </xs:sequence>
7
  </xs:complexType>
8
  <xs:element name="ArrayOfConvertDoc" nillable="true" type="tns:ArrayOfConvertDoc" />
9
  <xs:complexType name="ConvertDoc">
10
    <xs:sequence>
11
      <xs:element minOccurs="0" name="CREATE_DATETIME" type="xs:dateTime" />
12
      <xs:element minOccurs="0" name="CURRENT_PAGE" type="xs:int" />
13
      <xs:element minOccurs="0" name="ConvertPath" nillable="true" type="xs:string" />
14
      <xs:element minOccurs="0" name="DOCUMENT_ID" nillable="true" type="xs:string" />
15
      <xs:element minOccurs="0" name="DOCUMENT_URL" nillable="true" type="xs:string" />
16
      <xs:element minOccurs="0" name="END_DATETIME" type="xs:dateTime" />
17
      <xs:element minOccurs="0" name="EXCEPTION" nillable="true" type="xs:string" />
18
      <xs:element minOccurs="0" name="ID" nillable="true" type="xs:string" />
19
      <xs:element minOccurs="0" name="PROJECT_NO" nillable="true" type="xs:string" />
20
      <xs:element minOccurs="0" name="RECONVERTER" type="xs:int" />
21
      <xs:element minOccurs="0" name="SERVICE_ID" nillable="true" type="xs:string" />
22
      <xs:element minOccurs="0" name="START_DATETIME" type="xs:dateTime" />
23
      <xs:element minOccurs="0" name="STATUS" type="xs:int" />
24
      <xs:element minOccurs="0" name="TOTAL_PAGE" type="xs:int" />
25
    </xs:sequence>
26
  </xs:complexType>
27
  <xs:element name="ConvertDoc" nillable="true" type="tns:ConvertDoc" />
28
</xs:schema>
ConvertService/ServiceBase/Markus.Service.WcfClient/Connected Services/StationServiceTask/Markus.Service.WcfClient.StationServiceTask.ConvertDoc.datasource
1
<?xml version="1.0" encoding="utf-8"?>
2
<!--
3
    This file is automatically generated by Visual Studio .Net. It is 
4
    used to store generic object data source configuration information.  
5
    Renaming the file extension or editing the content of this file may   
6
    cause the file to be unrecognizable by the program.
7
-->
8
<GenericObjectDataSource DisplayName="ConvertDoc" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
9
   <TypeInfo>Markus.Service.WcfClient.StationServiceTask.ConvertDoc, Connected Services.StationServiceTask.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
10
</GenericObjectDataSource>
ConvertService/ServiceBase/Markus.Service.WcfClient/Markus.Service.WcfClient.csproj
59 59
    <LangVersion>7.3</LangVersion>
60 60
    <ErrorReport>prompt</ErrorReport>
61 61
  </PropertyGroup>
62
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
63
    <DebugSymbols>true</DebugSymbols>
64
    <OutputPath>bin\x64\Debug\</OutputPath>
65
    <DefineConstants>DEBUG;TRACE</DefineConstants>
66
    <DebugType>full</DebugType>
67
    <PlatformTarget>x64</PlatformTarget>
68
    <LangVersion>7.3</LangVersion>
69
    <ErrorReport>prompt</ErrorReport>
70
  </PropertyGroup>
71
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
72
    <OutputPath>bin\x64\Release\</OutputPath>
73
    <DefineConstants>TRACE</DefineConstants>
74
    <Optimize>true</Optimize>
75
    <DebugType>pdbonly</DebugType>
76
    <PlatformTarget>x64</PlatformTarget>
77
    <LangVersion>7.3</LangVersion>
78
    <ErrorReport>prompt</ErrorReport>
79
  </PropertyGroup>
80
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseAll_XI|x64'">
81
    <OutputPath>bin\x64\ReleaseAll_XI\</OutputPath>
82
    <DefineConstants>TRACE</DefineConstants>
83
    <Optimize>true</Optimize>
84
    <DebugType>pdbonly</DebugType>
85
    <PlatformTarget>x64</PlatformTarget>
86
    <LangVersion>7.3</LangVersion>
87
    <ErrorReport>prompt</ErrorReport>
88
  </PropertyGroup>
62 89
  <ItemGroup>
63 90
    <None Include="App.config" />
64 91
    <None Include="Connected Services\StationServiceAsync\Markus.Service.DataBase.Entities.xsd">
ConvertService/ServiceBase/Markus.Service.WcfService/IStationService.cs
45 45
        bool ReleaseConvertItems();
46 46

  
47 47
        [OperationContract]
48
        List<Markus.Service.DataBase.Entities.ConvertDoc> WaitConvertList();
48
        List<ConvertDoc> WaitConvertList();
49 49

  
50 50
        [OperationContract]
51
        List<Markus.Service.DataBase.Entities.ConvertDoc> AliveConvertList();
51
        List<ConvertDoc> AliveConvertList();
52 52
    }
53 53

  
54 54
    [DataContract]
ConvertService/ServiceBase/ServiceBase.sln
156 156
EndProject
157 157
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Markus.Service.DataBase.Test", "Markus.Service.DataBase.Test\Markus.Service.DataBase.Test.csproj", "{A24E55D1-5834-4FF0-95D0-1486A6489812}"
158 158
EndProject
159
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProecssAffinityTest", "ProecssAffinityTest\ProecssAffinityTest.csproj", "{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}"
160
	ProjectSection(ProjectDependencies) = postProject
161
		{19630D90-C780-47D4-97D9-54BD2D76B6D3} = {19630D90-C780-47D4-97D9-54BD2D76B6D3}
162
	EndProjectSection
163
EndProject
164
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProcessAffinityTestProcess", "ProcessAffinityTestProcess\ProcessAffinityTestProcess.csproj", "{19630D90-C780-47D4-97D9-54BD2D76B6D3}"
165
EndProject
159 166
Global
160 167
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
161 168
		ConvertProcessTest|Any CPU = ConvertProcessTest|Any CPU
......
603 610
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ConvertProcessTest|x86.Build.0 = Debug|Any CPU
604 611
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
605 612
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|Any CPU.Build.0 = Debug|Any CPU
606
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x64.ActiveCfg = Debug|Any CPU
607
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x64.Build.0 = Debug|Any CPU
613
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x64.ActiveCfg = Debug|x64
614
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x64.Build.0 = Debug|x64
608 615
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x86.ActiveCfg = Debug|Any CPU
609 616
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Debug|x86.Build.0 = Debug|Any CPU
610 617
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.DownloadPluginTest|Any CPU.ActiveCfg = Debug|Any CPU
......
620 627
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.Release|x86.Build.0 = Release|Any CPU
621 628
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|Any CPU.ActiveCfg = Release|Any CPU
622 629
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|Any CPU.Build.0 = Release|Any CPU
623
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|x64.ActiveCfg = Release|Any CPU
624
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|x64.Build.0 = Release|Any CPU
630
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|x64.ActiveCfg = Release|x64
631
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|x64.Build.0 = Release|x64
625 632
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|x86.ActiveCfg = Release|Any CPU
626 633
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll_XI|x86.Build.0 = Release|Any CPU
627 634
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|Any CPU.ActiveCfg = Release|Any CPU
628 635
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|Any CPU.Build.0 = Release|Any CPU
629
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|x64.ActiveCfg = Release|Any CPU
630
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|x64.Build.0 = Release|Any CPU
636
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|x64.ActiveCfg = Release|x64
637
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|x64.Build.0 = Release|x64
631 638
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|x86.ActiveCfg = Release|Any CPU
632 639
		{691078D3-BE0E-4697-BAB6-ED3ACA842D19}.ReleaseAll|x86.Build.0 = Release|Any CPU
633 640
		{9D72BE39-3471-4267-BD62-36BDA836EC1F}.ConvertProcessTest|Any CPU.ActiveCfg = Debug|Any CPU
......
1435 1442
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll_XI|x86.Build.0 = Release|Any CPU
1436 1443
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|Any CPU.ActiveCfg = Release|Any CPU
1437 1444
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|Any CPU.Build.0 = Release|Any CPU
1438
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|x64.ActiveCfg = Release|Any CPU
1439
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|x64.Build.0 = Release|Any CPU
1445
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|x64.ActiveCfg = Release|x64
1446
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|x64.Build.0 = Release|x64
1440 1447
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|x86.ActiveCfg = Release|Any CPU
1441 1448
		{F835DD07-7F0C-4DBD-A596-F3110D187421}.ReleaseAll|x86.Build.0 = Release|Any CPU
1442 1449
		{049371B3-816C-4104-9386-2F830B6BA7E5}.ConvertProcessTest|Any CPU.ActiveCfg = Debug|Any CPU
......
1511 1518
		{A24E55D1-5834-4FF0-95D0-1486A6489812}.ReleaseAll|x64.Build.0 = Release|Any CPU
1512 1519
		{A24E55D1-5834-4FF0-95D0-1486A6489812}.ReleaseAll|x86.ActiveCfg = Release|Any CPU
1513 1520
		{A24E55D1-5834-4FF0-95D0-1486A6489812}.ReleaseAll|x86.Build.0 = Release|Any CPU
1521
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ConvertProcessTest|Any CPU.ActiveCfg = Debug|Any CPU
1522
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ConvertProcessTest|Any CPU.Build.0 = Debug|Any CPU
1523
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ConvertProcessTest|x64.ActiveCfg = Debug|Any CPU
1524
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ConvertProcessTest|x64.Build.0 = Debug|Any CPU
1525
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ConvertProcessTest|x86.ActiveCfg = Debug|Any CPU
1526
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ConvertProcessTest|x86.Build.0 = Debug|Any CPU
1527
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1528
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Debug|Any CPU.Build.0 = Debug|Any CPU
1529
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Debug|x64.ActiveCfg = Debug|Any CPU
1530
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Debug|x64.Build.0 = Debug|Any CPU
1531
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Debug|x86.ActiveCfg = Debug|Any CPU
1532
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Debug|x86.Build.0 = Debug|Any CPU
1533
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.DownloadPluginTest|Any CPU.ActiveCfg = Debug|Any CPU
1534
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.DownloadPluginTest|Any CPU.Build.0 = Debug|Any CPU
1535
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.DownloadPluginTest|x64.ActiveCfg = Debug|Any CPU
1536
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.DownloadPluginTest|x64.Build.0 = Debug|Any CPU
1537
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.DownloadPluginTest|x86.ActiveCfg = Debug|Any CPU
1538
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.DownloadPluginTest|x86.Build.0 = Debug|Any CPU
1539
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Release|Any CPU.ActiveCfg = Release|Any CPU
1540
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Release|Any CPU.Build.0 = Release|Any CPU
1541
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Release|x64.ActiveCfg = Release|Any CPU
1542
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Release|x64.Build.0 = Release|Any CPU
1543
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Release|x86.ActiveCfg = Release|Any CPU
1544
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.Release|x86.Build.0 = Release|Any CPU
1545
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll_XI|Any CPU.ActiveCfg = Release|Any CPU
1546
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll_XI|Any CPU.Build.0 = Release|Any CPU
1547
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll_XI|x64.ActiveCfg = Release|Any CPU
1548
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll_XI|x64.Build.0 = Release|Any CPU
1549
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll_XI|x86.ActiveCfg = Release|Any CPU
1550
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll_XI|x86.Build.0 = Release|Any CPU
1551
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll|Any CPU.ActiveCfg = Release|Any CPU
1552
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll|Any CPU.Build.0 = Release|Any CPU
1553
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll|x64.ActiveCfg = Release|Any CPU
1554
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll|x64.Build.0 = Release|Any CPU
1555
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll|x86.ActiveCfg = Release|Any CPU
1556
		{7B149E7F-FACD-47B2-80F3-D62D9B1A3158}.ReleaseAll|x86.Build.0 = Release|Any CPU
1557
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ConvertProcessTest|Any CPU.ActiveCfg = Debug|Any CPU
1558
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ConvertProcessTest|Any CPU.Build.0 = Debug|Any CPU
1559
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ConvertProcessTest|x64.ActiveCfg = Debug|Any CPU
1560
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ConvertProcessTest|x64.Build.0 = Debug|Any CPU
1561
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ConvertProcessTest|x86.ActiveCfg = Debug|Any CPU
1562
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ConvertProcessTest|x86.Build.0 = Debug|Any CPU
1563
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1564
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
1565
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Debug|x64.ActiveCfg = Debug|Any CPU
1566
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Debug|x64.Build.0 = Debug|Any CPU
1567
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Debug|x86.ActiveCfg = Debug|Any CPU
1568
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Debug|x86.Build.0 = Debug|Any CPU
1569
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.DownloadPluginTest|Any CPU.ActiveCfg = Debug|Any CPU
1570
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.DownloadPluginTest|Any CPU.Build.0 = Debug|Any CPU
1571
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.DownloadPluginTest|x64.ActiveCfg = Debug|Any CPU
1572
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.DownloadPluginTest|x64.Build.0 = Debug|Any CPU
1573
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.DownloadPluginTest|x86.ActiveCfg = Debug|Any CPU
1574
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.DownloadPluginTest|x86.Build.0 = Debug|Any CPU
1575
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
1576
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Release|Any CPU.Build.0 = Release|Any CPU
1577
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Release|x64.ActiveCfg = Release|Any CPU
1578
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Release|x64.Build.0 = Release|Any CPU
1579
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Release|x86.ActiveCfg = Release|Any CPU
1580
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.Release|x86.Build.0 = Release|Any CPU
1581
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll_XI|Any CPU.ActiveCfg = Release|Any CPU
1582
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll_XI|Any CPU.Build.0 = Release|Any CPU
1583
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll_XI|x64.ActiveCfg = Release|Any CPU
1584
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll_XI|x64.Build.0 = Release|Any CPU
1585
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll_XI|x86.ActiveCfg = Release|Any CPU
1586
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll_XI|x86.Build.0 = Release|Any CPU
1587
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll|Any CPU.ActiveCfg = Release|Any CPU
1588
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll|Any CPU.Build.0 = Release|Any CPU
1589
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll|x64.ActiveCfg = Release|Any CPU
1590
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll|x64.Build.0 = Release|Any CPU
1591
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll|x86.ActiveCfg = Release|Any CPU
1592
		{19630D90-C780-47D4-97D9-54BD2D76B6D3}.ReleaseAll|x86.Build.0 = Release|Any CPU
1514 1593
	EndGlobalSection
1515 1594
	GlobalSection(SolutionProperties) = preSolution
1516 1595
		HideSolutionNode = FALSE

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)