프로젝트

일반

사용자정보

개정판 f363a40e

IDf363a40e7d05432d0548ca65521accc4227e357b
상위 65fbe3cb
하위 44035a96, a0341bef

김태성이(가) 5년 이상 전에 추가함

convertprocess에 plugin 기능 추가

Change-Id: I00595ab4e4a42960defcc6b2d662dbb75d3e8615

차이점 보기:

ConvertService/ServiceBase/Markus.Service.Convert.IPlugin/IPlugin.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6

  
7
namespace Markus.Service.Convert.Plugin
8
{
9
    public interface IPlugin
10
    {
11
        string Name { get; }
12

  
13
        string Exception { get; set; }
14

  
15
        bool Do(string ConvertID, Dictionary<string, object> Parameters);
16
    }
17
}
ConvertService/ServiceBase/Markus.Service.Convert.IPlugin/Markus.Service.Convert.IPlugin.csproj
1
<?xml version="1.0" encoding="utf-8"?>
2
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
  <PropertyGroup>
5
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7
    <ProjectGuid>{A5BA7325-379C-4CCB-B156-1704FC2175E3}</ProjectGuid>
8
    <OutputType>Library</OutputType>
9
    <AppDesignerFolder>Properties</AppDesignerFolder>
10
    <RootNamespace>Markus.Service.Convert.IPlugin</RootNamespace>
11
    <AssemblyName>Markus.Service.Convert.IPlugin</AssemblyName>
12
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
13
    <FileAlignment>512</FileAlignment>
14
    <Deterministic>true</Deterministic>
15
  </PropertyGroup>
16
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
17
    <DebugSymbols>true</DebugSymbols>
18
    <DebugType>full</DebugType>
19
    <Optimize>false</Optimize>
20
    <OutputPath>bin\Debug\</OutputPath>
21
    <DefineConstants>DEBUG;TRACE</DefineConstants>
22
    <ErrorReport>prompt</ErrorReport>
23
    <WarningLevel>4</WarningLevel>
24
  </PropertyGroup>
25
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
26
    <DebugType>pdbonly</DebugType>
27
    <Optimize>true</Optimize>
28
    <OutputPath>bin\Release\</OutputPath>
29
    <DefineConstants>TRACE</DefineConstants>
30
    <ErrorReport>prompt</ErrorReport>
31
    <WarningLevel>4</WarningLevel>
32
  </PropertyGroup>
33
  <ItemGroup>
34
    <Reference Include="System" />
35
    <Reference Include="System.Core" />
36
    <Reference Include="System.Xml.Linq" />
37
    <Reference Include="System.Data.DataSetExtensions" />
38
    <Reference Include="Microsoft.CSharp" />
39
    <Reference Include="System.Data" />
40
    <Reference Include="System.Net.Http" />
41
    <Reference Include="System.Xml" />
42
  </ItemGroup>
43
  <ItemGroup>
44
    <Compile Include="IPlugin.cs" />
45
    <Compile Include="Properties\AssemblyInfo.cs" />
46
  </ItemGroup>
47
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
48
</Project>
ConvertService/ServiceBase/Markus.Service.Convert.IPlugin/Properties/AssemblyInfo.cs
1
using System.Reflection;
2
using System.Runtime.CompilerServices;
3
using System.Runtime.InteropServices;
4

  
5
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
6
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
7
// 이러한 특성 값을 변경하세요.
8
[assembly: AssemblyTitle("Markus.Service.Convert.IPlugin")]
9
[assembly: AssemblyDescription("")]
10
[assembly: AssemblyConfiguration("")]
11
[assembly: AssemblyCompany("")]
12
[assembly: AssemblyProduct("Markus.Service.Convert.IPlugin")]
13
[assembly: AssemblyCopyright("Copyright ©  2019")]
14
[assembly: AssemblyTrademark("")]
15
[assembly: AssemblyCulture("")]
16

  
17
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
18
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
19
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
20
[assembly: ComVisible(false)]
21

  
22
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
23
[assembly: Guid("a5ba7325-379c-4ccb-b156-1704fc2175e3")]
24

  
25
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
26
//
27
//      주 버전
28
//      부 버전 
29
//      빌드 번호
30
//      수정 버전
31
//
32
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
33
// 기본값으로 할 수 있습니다.
34
// [assembly: AssemblyVersion("1.0.*")]
35
[assembly: AssemblyVersion("1.0.0.0")]
36
[assembly: AssemblyFileVersion("1.0.0.0")]
ConvertService/ServiceBase/Markus.Service.Convert/ConvertService.cs
26 26
        private string gTempFileName;
27 27
        private Markus.SaveTask gSaveTask;
28 28
        private Markus.MarkusPDF gMarkusPDF;
29
     
29

  
30
        // 컨버터 완료시 파일갯수를 체크 하여 틀리면 reconvert를 1로 하고 다시 컨버팅 하도록 한다.
31
        private int ReConvert;
32

  
30 33

  
31 34
        private StationServiceClient StationServiceClient; 
32 35

  
......
207 210
                    /// 설정된 MultiThreadMaxPages에 따른 컨버터 분기
208 211
                    if (gMarkusPDF.PageCount() > ConvertProcessContext.MultiThreadMaxPages)
209 212
                    {
210
                        /// 큰 사이즈의 파일 컨버팅
213
                        // 큰 사이즈의 파일 컨버팅
211 214
                        result = ConvertBigFileProcess(saveitem);
212 215
                    }
213 216
                    else
......
215 218
                        /// 작은 사이즈의 컨버팅
216 219
                        await Task.Factory.StartNew(new Action(() =>
217 220
                        {
218
                            gMarkusPDF.Dispose();
219
                            gMarkusPDF = null;
220

  
221 221
                            result = gSaveTask.SaveFile(saveitem);
222

  
223 222
                        }), TaskCreationOptions.LongRunning);
224 223
                    }
225 224

  
225
                    // 파일 체크 후 갯수가 안맞으면 다시 컨버팅한다.
226
                    if (ReConvert < 1 && (result.PageInfoList.Count() != saveitem.TotalPages
227
                                   || Directory.EnumerateFiles(saveitem.SavePath, "*.png").Count() != saveitem.TotalPages
228
                                       || Directory.EnumerateFiles(saveitem.SavePath, "*.jpg").Count() != saveitem.TotalPages))
229
                    {
230
                        result.StatusCode = StatusCodeType.PageError;
231
                        result.Message = "Page Count Error";
232
                        ReConvert = 1;
233

  
234
                        result = ConvertBigFileProcess(saveitem);
235
                    }
236

  
226 237
                    ///  페이지 정보 저장
227 238
                    if (result.PageInfoList?.Count() > 0)
228 239
                    {
......
378 389
                }
379 390
            }
380 391
            catch (Exception ex)
381
            {
392
            {                                                                                      
382 393
                result = false;
383 394
            }
384 395

  
......
400 411

  
401 412
                for (int currentPageNo = 1; currentPageNo <= saveitem.TotalPages; currentPageNo++)
402 413
                {
403
                    var saveResult = gMarkusPDF.SavePage(currentPageNo, Path.Combine(saveitem.SavePath, $"{currentPageNo}.png"));
414
                    try
415
                    {
416
                        string saveFile = Path.Combine(saveitem.SavePath, $"{currentPageNo}.png");
404 417

  
405
                    saveitem.Status = StatusCodeType.Saving;
406
                    saveitem.CurrentPage = currentPageNo;
407
                    saveitem.ErrorMessage = saveResult.Message;
418
                        if (ReConvert < 1 || (ReConvert == 1 && !File.Exists(saveFile)))
419
                         {
408 420

  
409
                    result.PageInfoAdd(saveResult.SavePageInfo);
421
                            var saveResult = gMarkusPDF.SavePage(currentPageNo, saveFile);
410 422

  
411
                    MarkusPdfStateChangeEvent(this, new StateEventArgs(saveitem));
412
                    Console.WriteLine($"CurrentPage : {currentPageNo}");
423
                            saveitem.Status = StatusCodeType.Saving;
424
                            saveitem.CurrentPage = currentPageNo;
425
                            saveitem.ErrorMessage = saveResult.Message;
413 426

  
414
                    /// 설정된 최대 페이지이거나 설정된 메모리보다 크면 릴리즈
415
                    if (currentPageNo% ConvertProcessContext.MultiThreadMaxPages == 0 || ConvertProcessContext.ReleaseWorkMemory < Environment.WorkingSet)
427
                            int pageListCount = 0;
428

  
429
                            if(result.PageInfoList != null)
430
                            {
431
                                pageListCount = result.PageInfoList.Count(f => f.PageNo == saveResult.SavePageInfo.PageNo);
432
                            }
433
                            
434
                            if (pageListCount == 0)
435
                            {
436
                                result.PageInfoAdd(saveResult.SavePageInfo);
437
                            }
438

  
439
                            MarkusPdfStateChangeEvent(this, new StateEventArgs(saveitem));
440
                            Console.WriteLine($"CurrentPage : {currentPageNo}");
441

  
442
                            /// 설정된 최대 페이지이거나 설정된 메모리보다 크면 릴리즈
443
                            if (currentPageNo % ConvertProcessContext.MultiThreadMaxPages == 0 || ConvertProcessContext.ReleaseWorkMemory < Environment.WorkingSet)
444
                            {
445
                                Console.WriteLine($"physical memory : {Environment.WorkingSet}");
446

  
447
                                gMarkusPDF.Dispose();
448
                                gMarkusPDF = null;
449
                                System.Threading.Thread.SpinWait(5);
450

  
451
                                gMarkusPDF = new MarkusPDF();
452
                                gMarkusPDF.pdfLoad(saveitem.PdfFilePath, saveitem.MinimumFontSize, saveitem.UseResolution);
453
                            }
454
                            System.Threading.Thread.SpinWait(2);
455
                        }
456
                    }
457
                    catch (Exception ex)
416 458
                    {
417
                        Console.WriteLine($"physical memory : {Environment.WorkingSet}");
459
                        result.StatusCode = StatusCodeType.PageError;
460
                        result.Message = "Save Error - " + ex.Message;
418 461

  
419
                        gMarkusPDF.Dispose();
420
                        gMarkusPDF = null;
421
                        System.Threading.Thread.SpinWait(5);
462
                        if (gMarkusPDF != null)
463
                        {
464
                            gMarkusPDF.Dispose();
465
                            gMarkusPDF = null;
466
                        }
422 467

  
423 468
                        gMarkusPDF = new MarkusPDF();
424 469
                        gMarkusPDF.pdfLoad(saveitem.PdfFilePath, saveitem.MinimumFontSize, saveitem.UseResolution);
470

  
471
                        currentPageNo = currentPageNo - 1;
472
                    }
473
                    finally
474
                    {
475
                     
425 476
                    }
426
                    System.Threading.Thread.SpinWait(2);
427 477
                }
428 478

  
429 479
                result.StatusCode = StatusCodeType.Completed;
ConvertService/ServiceBase/Markus.Service.ConvertProcess/GenericPluginLoader.cs
1
/*
2
   Copyright 2013 Christoph Gattnar
3

  
4
   Licensed under the Apache License, Version 2.0 (the "License");
5
   you may not use this file except in compliance with the License.
6
   You may obtain a copy of the License at
7

  
8
	   http://www.apache.org/licenses/LICENSE-2.0
9

  
10
   Unless required by applicable law or agreed to in writing, software
11
   distributed under the License is distributed on an "AS IS" BASIS,
12
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
   See the License for the specific language governing permissions and
14
   limitations under the License.
15
*/
16

  
17
using System;
18
using System.Collections.Generic;
19
using System.IO;
20
using System.Reflection;
21

  
22
namespace Markus.Service.ConvertProcess
23
{
24
	public static class GenericPluginLoader<T>
25
	{
26
		public static ICollection<T> LoadPlugins(string path)
27
		{
28
			string[] dllFileNames = null;
29

  
30
			if(Directory.Exists(path))
31
			{
32
				dllFileNames = Directory.GetFiles(path, "*.dll");
33

  
34
				ICollection<Assembly> assemblies = new List<Assembly>(dllFileNames.Length);
35
				foreach(string dllFile in dllFileNames)
36
				{
37
					AssemblyName an = AssemblyName.GetAssemblyName(dllFile);
38
					Assembly assembly = Assembly.Load(an);
39
					assemblies.Add(assembly);
40
				}
41

  
42
				Type pluginType = typeof(T);
43
				ICollection<Type> pluginTypes = new List<Type>();
44
				foreach(Assembly assembly in assemblies)
45
				{
46
					if(assembly != null)
47
					{
48
						Type[] types = assembly.GetTypes();
49

  
50
						foreach(Type type in types)
51
						{
52
							if(type.IsInterface || type.IsAbstract)
53
							{
54
								continue;
55
							}
56
							else
57
							{
58
								if(type.GetInterface(pluginType.FullName) != null)
59
								{
60
									pluginTypes.Add(type);
61
								}
62
							}
63
						}
64
					}
65
				}
66

  
67
				ICollection<T> plugins = new List<T>(pluginTypes.Count);
68
				foreach(Type type in pluginTypes)
69
				{
70
					T plugin = (T)Activator.CreateInstance(type);
71
					plugins.Add(plugin);
72
				}
73

  
74
				return plugins;
75
			}
76

  
77
			return null;
78
		}
79
	}
80
}
ConvertService/ServiceBase/Markus.Service.ConvertProcess/Markus.Service.ConvertProcess.csproj
89 89
    <Reference Include="System.Xml" />
90 90
  </ItemGroup>
91 91
  <ItemGroup>
92
    <Compile Include="GenericPluginLoader.cs" />
92 93
    <Compile Include="Program.cs" />
93 94
    <Compile Include="Properties\AssemblyInfo.cs" />
94 95
  </ItemGroup>
......
97 98
      <Link>Log.config</Link>
98 99
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
99 100
    </None>
101
    <None Include="..\Markus.Service.Station\Plugin.ini">
102
      <Link>Plugin.ini</Link>
103
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
104
    </None>
105
    <None Include="..\Markus.Service.Station\ServiceStation.ini">
106
      <Link>ServiceStation.ini</Link>
107
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
108
    </None>
100 109
    <None Include="App.config" />
101 110
    <None Include="packages.config" />
102 111
  </ItemGroup>
......
105 114
      <Project>{4a465fd0-8130-4d6b-a65f-c3cd6cc355a4}</Project>
106 115
      <Name>Markus.Service.Interface</Name>
107 116
    </ProjectReference>
117
    <ProjectReference Include="..\Markus.Service.Convert.IPlugin\Markus.Service.Convert.IPlugin.csproj">
118
      <Project>{a5ba7325-379c-4ccb-b156-1704fc2175e3}</Project>
119
      <Name>Markus.Service.Convert.IPlugin</Name>
120
    </ProjectReference>
108 121
    <ProjectReference Include="..\Markus.Service.Convert\Markus.Service.Convert.csproj">
109 122
      <Project>{867e065c-3c22-47b1-9c2a-130a78dddd51}</Project>
110 123
      <Name>Markus.Service.Convert</Name>
......
132 145
  </ItemGroup>
133 146
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
134 147
  <PropertyGroup>
135
    <PreBuildEvent>xcopy /y /d  "$(ProjectDir)..\libpthread\$(PlatformName)\libpthread.dll" "$(ProjectDir)$(OutDir)"</PreBuildEvent>
148
    <PreBuildEvent>xcopy /y /d  "$(ProjectDir)..\libpthread\$(PlatformName)\libpthread.dll" "$(ProjectDir)$(OutDir)"
149
xcopy /y /d /I  "$(SolutionDir)publish\Plugin\*.*" "$(ProjectDir)$(OutDir)Plugin"</PreBuildEvent>
136 150
  </PropertyGroup>
137 151
  <PropertyGroup>
138 152
    <PostBuildEvent>rem "$(Obfuscar)" obfuscar.xml</PostBuildEvent>
ConvertService/ServiceBase/Markus.Service.ConvertProcess/Program.cs
11 11
using System.Web.Script.Serialization;
12 12
using System.Windows.Forms;
13 13
using static Markus.Service.Extensions.Encrypt;
14
using ConvertPlugin = Markus.Service.Convert.Plugin;
14 15

  
15 16
namespace Markus.Service.ConvertProcess
16 17
{
......
45 46
                    {
46 47
                        logger.Error($"Markus.Service.ConvertProcess Error ConvertId : {convetContext.ConvertID}");
47 48
                    }
49
                    else
50
                    {
51
                        var pluginPath = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "Plugin");
52
                        var plugins = GenericPluginLoader<ConvertPlugin.IPlugin>.LoadPlugins(pluginPath);
53
                        var config = ConfigHelper.AppConfig("Plugin.ini");
54

  
55
                        if(plugins != null)
56
                        { 
57
                            foreach (var item in plugins)
58
                            {
59
                                Dictionary<string, object> parameters = new Dictionary<string, object>();
60

  
61
                                var sections = config.Sections.Where(x=>x.SectionName == item.Name);
62

  
63
                                if (sections.Count() > 0)
64
                                {
65
                                    foreach (var param in sections.First().Keys)
66
                                    {
67
                                        parameters.Add(param.Name, param.Content);
68
                                    }
69
                                }
70

  
71
                                var result = item.Do(convetContext.ConvertID, parameters);
72

  
73
                                if(!result)
74
                                {
75
                                    logger.Error($"Markus.Service.ConvertProcess Error ConvertId : {convetContext.ConvertID} PlugIn Error : ",new Exception(item.Exception.ToString()));
76
                                }
77
                            }
78
                        }
79
                    }
48 80
                }
49 81
            }
50 82
            catch (Exception ex)
ConvertService/ServiceBase/Markus.Service.Station/Helper/ConfigHelper.cs
1
using Markus.Service.Station;
2
using Salaros.Configuration;
3
using System;
4
using System.Collections.Generic;
5
using System.Globalization;
6
using System.Linq;
7
using System.Text;
8
using System.Threading.Tasks;
9

  
10
namespace Markus.Service
11
{
12
    public class ConfigHelper
13
    {
14
        public static ConfigParser AppConfig(string ConfigFileName)
15
        {
16
            var startDir = AppDomain.CurrentDomain.BaseDirectory;
17
            var configFilePath = $"{System.IO.Path.Combine(startDir, ConfigFileName)}";
18

  
19
            if(!System.IO.File.Exists(configFilePath))
20
            {
21
                throw new Exception($"Config File Not Found. {configFilePath}");
22
            }
23

  
24
            return  new ConfigParser(configFilePath,
25
                new ConfigParserSettings
26
                {
27
                    MultiLineValues = MultiLineValues.Simple | MultiLineValues.AllowValuelessKeys | MultiLineValues.QuoteDelimitedValues,
28
                    Culture = new CultureInfo("en-US")
29
                });
30
        }
31
    }
32
}
ConvertService/ServiceBase/Markus.Service.Station/Helper/WcfHostHelper.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
using System.ServiceModel;
7
using System.ServiceModel.Description;
8
using System.Web.Services;
9
using System.ServiceModel.Channels;
10
using System.Xml;
11

  
12
namespace Markus.Service
13
{
14
    public static class WebServiceHelper
15
    {
16
        public static ServiceHost WcfCreate(this ServiceHost serviceHost, object service, Type serviceInterface, IEnumerable<Uri> HostEndpoints)
17
        {
18
            if(serviceHost != null)
19
            {
20
                foreach (var item in serviceHost.ChannelDispatchers)
21
                {
22
                    item.Abort();
23
                }
24

  
25
                serviceHost.Abort();
26
                serviceHost = null;
27
            }
28

  
29
            serviceHost = new ServiceHost(service, HostEndpoints.ToArray());
30
            
31
            if (HostEndpoints.GroupBy(f => f.Scheme).Count() != HostEndpoints.Count())
32
            {
33
                throw new Exception("Host Uri's schema must be unique.");
34
            }
35

  
36
            ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
37
          
38
            mBehave.HttpGetEnabled = true;
39
            serviceHost.Description.Behaviors.Add(mBehave);
40

  
41
            //ServiceBehaviorAttribute attribute = new ServiceBehaviorAttribute();
42
            //attribute.InstanceContextMode = InstanceContextMode.Single;
43
            //serviceHost.Description.Behaviors.Add(attribute);
44

  
45
            foreach (var item in HostEndpoints)
46
            {
47
                System.ServiceModel.Channels.Binding binding = null;
48
                System.ServiceModel.Channels.Binding bindingMex = null;
49

  
50
                if (item.Scheme == Uri.UriSchemeHttp)
51
                {
52
                    binding = new BasicHttpBinding();
53
                    bindingMex = MetadataExchangeBindings.CreateMexHttpBinding();
54

  
55
                    BindingElementCollection bindElemColl = new BindingElementCollection();
56
                    BinaryMessageEncodingBindingElement bindElem = new BinaryMessageEncodingBindingElement();
57
                    bindElem.MaxReadPoolSize = 64;
58
                    bindElem.MaxWritePoolSize = 16;
59
                    bindElem.MaxSessionSize = 2048;
60
                    XmlDictionaryReaderQuotas readerQuotas = new XmlDictionaryReaderQuotas();
61
                    readerQuotas.MaxDepth = 32;
62
                    readerQuotas.MaxStringContentLength = Int32.MaxValue;
63
                    readerQuotas.MaxArrayLength = 16384;
64
                    readerQuotas.MaxBytesPerRead = 4096;
65
                    readerQuotas.MaxNameTableCharCount = 16384;
66
                    bindElem.ReaderQuotas = readerQuotas;
67

  
68
                    binding.CreateBindingElements().Add(bindElem);
69
                }
70
                else if (item.Scheme == Uri.UriSchemeHttps)
71
                {
72
                    binding = new BasicHttpsBinding();
73
                    bindingMex = MetadataExchangeBindings.CreateMexHttpsBinding();
74
                }
75
                else if (item.Scheme == Uri.UriSchemeNetTcp)
76
                {
77
                    binding = new NetTcpBinding();
78
                    bindingMex = MetadataExchangeBindings.CreateMexTcpBinding();
79
                }
80
                else
81
                {
82
                    throw new Exception($"{item.ToString()} is Not Support Schema.");
83
                }
84
                
85
                serviceHost.AddServiceEndpoint(serviceInterface, binding, item);
86
                serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), bindingMex, "mex");
87
            }
88

  
89

  
90
            var behavior = serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>();
91
            behavior.InstanceContextMode = InstanceContextMode.Single;
92

  
93
            serviceHost.Open();
94
            return serviceHost;
95
        }
96
    }
97
}
ConvertService/ServiceBase/Markus.Service.Station/Markus.Service.Station.csproj
12 12
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
13 13
    <FileAlignment>512</FileAlignment>
14 14
    <Deterministic>true</Deterministic>
15
    <IsWebBootstrapper>false</IsWebBootstrapper>
16
    <NuGetPackageImportStamp>
17
    </NuGetPackageImportStamp>
15 18
    <PublishUrl>publish\</PublishUrl>
16 19
    <Install>true</Install>
17 20
    <InstallFrom>Disk</InstallFrom>
......
24 27
    <MapFileExtensions>true</MapFileExtensions>
25 28
    <ApplicationRevision>0</ApplicationRevision>
26 29
    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
27
    <IsWebBootstrapper>false</IsWebBootstrapper>
28 30
    <UseApplicationTrust>false</UseApplicationTrust>
29 31
    <BootstrapperEnabled>true</BootstrapperEnabled>
30
    <NuGetPackageImportStamp>
31
    </NuGetPackageImportStamp>
32 32
  </PropertyGroup>
33 33
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
34 34
    <PlatformTarget>AnyCPU</PlatformTarget>
......
120 120
  </ItemGroup>
121 121
  <ItemGroup>
122 122
    <Compile Include="ApplicationDefine.cs" />
123
    <Compile Include="Helper\ConfigHelper.cs" />
124 123
    <Compile Include="ProjectInstaller.cs">
125 124
      <SubType>Component</SubType>
126 125
    </Compile>
......
166 165
    <Content Include="ServiceStation.ini">
167 166
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
168 167
    </Content>
168
    <Content Include="Plugin.ini">
169
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
170
    </Content>
169 171
  </ItemGroup>
170 172
  <ItemGroup>
171 173
    <EmbeddedResource Include="ProjectInstaller.resx">
......
221 223
  </ItemGroup>
222 224
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
223 225
  <PropertyGroup>
224
    <PreBuildEvent>
225
    </PreBuildEvent>
226
    <PreBuildEvent>xcopy /y /d /I  "$(SolutionDir)publish\Plugin\*.*" "$(ProjectDir)$(OutDir)Plugin"</PreBuildEvent>
226 227
  </PropertyGroup>
227 228
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
228 229
    <PropertyGroup>
ConvertService/ServiceBase/Markus.Service.Station/Plugin.ini
1
#해당 플러그인에 전달되는 parameter
2
[PemssDocumentInfo]
3
PEMSS_SERVICE = http://localhost:13009/PemssService.svc
4
# remote test MARKUS_V3
5
MARKUS_ConnectionString = ScTg8MgTdbARVQXhb1K9YI3/6emjnMuODvTWZ+UnUZQ8z/Gv4TksSLRn84HTZiC5pT5Vi9KdIFiJ/icpeXrUfa2LTnWdibJ7Oz+4QcYCftqVNPaS3nbiAo67l93XLRVqCpyt4tTSgwhRhdJob48gZhx+zmvoKmAwBR/ofCam3SNjx85gHFWc+gFffVOACIGbvM940SGroUFzK85kDd7Xlg==
ConvertService/ServiceBase/Markus.Service.Station/ServiceStation.ini
2 2
WINDOW = true
3 3
IS_STATAION = true
4 4

  
5
STATAION_ADDRESS = http://192.168.0.129:9101/StationService
5
STATAION_ADDRESS = http://localhost:9101/StationService
6 6

  
7 7
SERVICE_ID = 0AC6FD8E-5060-4B0F-9E6B-A7380B9FCF7B
8 8
# 구분자는 ','
9
SERVICE_LIST = 0AC6FD8E-5060-4B0F-9E6B-A7380B9FCF7B,03A98B3B-ECCD-4972-B658-43C7571965DA
9
SERVICE_LIST = 0AC6FD8E-5060-4B0F-9E6B-A7380B9FCF7B
10 10

  
11 11
# DAELIM
12 12
#MarkusDataBaseConnectionString = yRW0I8OJY/boJcR9rTFeH229g456BwO8BaXQbW8h6iCR10JRc5tOl2BDWa1595q0bvW9uD5HsHn9ke4oK3yaw2OYHh8pgYKdhW48xeAl49510h1DPv8uSbqcWdwZ2AjernORxxaEAUqHZb5DFlndcWuid82ZwP/EGxGNhaaCG+KVogeHwI5FZZKrmUTWe3159qk11Q4XswrHeLy8HQn5Qg==
......
44 44
STATION_PORT =	9101
45 45
CONVERT_PORT =	9102
46 46
FINAL_PORT =	9103
47
STATION_SERVICE_NAME = StationService
47
STATION_SERVICE_NAME = StationService
ConvertService/ServiceBase/Markus.Service.StationController/Behaviors/StatusTypeSet.cs
9 9

  
10 10
namespace Markus.Service.StationController.Behaviors
11 11
{
12
    public  class StatusTypeSet : DependencyObject
12
    public  class StatusTypeSet : System.Windows.Interactivity.Behavior<System.Windows.Controls.Control>
13 13
    {
14
        public static List<StatusCodeType> GetStatusTypes(DependencyObject obj)
14
        protected override void OnAttached()
15 15
        {
16
            return (List<StatusCodeType>)obj.GetValue(StatusTypesProperty);
16
            AssociatedObject.Loaded += AssociatedObject_Loaded;
17
            base.OnAttached();
17 18
        }
18 19

  
19
        public static void SetStatusTypes(DependencyObject obj, List<StatusCodeType> value)
20
        private void AssociatedObject_Loaded(object sender, RoutedEventArgs e)
20 21
        {
21
            obj.SetValue(StatusTypesProperty, value);
22

  
23
            if(obj is UserControl)
22
            if (AssociatedObject is UserControl)
24 23
            {
25
                if ((obj as UserControl).DataContext is ViewModel.DataBaseByStatusViewModel)
24
                if ((AssociatedObject as UserControl).DataContext is ViewModel.DataBaseByStatusViewModel)
26 25
                {
27
                    ((obj as UserControl).DataContext as ViewModel.DataBaseByStatusViewModel).StatusType = value;
26
                    ((AssociatedObject as UserControl).DataContext as ViewModel.DataBaseByStatusViewModel).StatusType = GetStatusTypes(AssociatedObject);
28 27
                }
29 28
            }
30 29
        }
31 30

  
32
        public static readonly DependencyProperty StatusTypesProperty = DependencyProperty.RegisterAttached("StatusTypes", typeof(List<StatusCodeType>), typeof(StatusTypeSet)
33
                                                                        , new FrameworkPropertyMetadata(new List<StatusCodeType> { StatusCodeType.None}, new PropertyChangedCallback(StatusTypePropertyChanged))
34
                                                                        { });
31
        public static IEnumerable<StatusCodeType> GetStatusTypes(DependencyObject obj)
32
        {
33
            return (IEnumerable<StatusCodeType>)obj.GetValue(StatusTypesProperty);
34
        }
35

  
36
        public static void SetStatusTypes(DependencyObject obj, IEnumerable<StatusCodeType> value)
37
        {
38
            obj.SetValue(StatusTypesProperty, value);
39
        }
40

  
41
        public static readonly DependencyProperty StatusTypesProperty = DependencyProperty.RegisterAttached("StatusTypes", typeof(IEnumerable<StatusCodeType>), typeof(StatusTypeSet)
42
                                                                        , new FrameworkPropertyMetadata(new PropertyChangedCallback(StatusTypePropertyChanged))
43
                                                                        { BindsTwoWayByDefault=true });
35 44

  
36 45
        private static void StatusTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
37 46
        {
38
            
47
            var owner = d as StatusTypeSet;
48

  
49
            SetStatusTypes(owner, (IEnumerable<StatusCodeType>)e.NewValue);
50

  
51
            //if (owner.AssociatedObject is UserControl)
52
            //{
53
            //    if ((owner.AssociatedObject as UserControl).DataContext is ViewModel.DataBaseByStatusViewModel)
54
            //    {
55
            //        ((owner.AssociatedObject as UserControl).DataContext as ViewModel.DataBaseByStatusViewModel).StatusType = (IEnumerable<StatusCodeType>)e.NewValue;
56
            //    }
57
            //}
39 58
        }
40 59
    }
41 60
}
ConvertService/ServiceBase/Markus.Service.StationController/StationController.ini
1 1
[SERVICE]
2 2
SERVICE_ADDRESS = http://172.20.120.142:9991/StationService,http://172.20.120.143:9991/StationService
3 3

  
4
# daelim
4 5
#http://172.20.120.142:9991/StationService,http://172.20.120.143:9991/StationService
6

  
7
#vm
8
#http://192.168.0.129:9101/StationService,http://192.168.0.203:9101/StationService
5 9
# http://172.20.120.142:9991/StationService,http://172.20.120.143:9991/StationService
6 10
#,http://192.168.0.68:9101/StationService
7 11
#http://172.20.120.142:9991/StationService
ConvertService/ServiceBase/Markus.Service.StationController/ViewModel/DataBaseByStatusViewModel.cs
19 19
        private System.Collections.ObjectModel.ObservableCollection<ConvertItem> items;
20 20
        private ConvertItem selectItem;
21 21

  
22
        private List<StatusCodeType> statusType;
22
        private IEnumerable<StatusCodeType> statusType;
23 23
        private bool isLoading;
24 24

  
25 25
        public System.Collections.ObjectModel.ObservableCollection<ConvertItem> Items
......
41 41
        }
42 42

  
43 43

  
44
        public List<StatusCodeType> StatusType
44
        public IEnumerable<StatusCodeType> StatusType
45 45
        {
46 46
            get => statusType; set
47 47
            {
ConvertService/ServiceBase/Markus.Service.StationController/Views/MergeDataView.xaml
7 7
             xmlns:markus="clr-namespace:Markus.Message;assembly=Markus.Message"
8 8
             xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
9 9
             xmlns:local="clr-namespace:Markus.Service.StationController.ViewModel"
10
             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
10 11
             xmlns:Behaviors="clr-namespace:Markus.Service.StationController.Behaviors"
11 12
             mc:Ignorable="d" 
12 13
             d:DesignHeight="450" d:DesignWidth="800">
14
    <UserControl.Resources>
15
        <x:Array x:Key="FilterTypes" Type="{x:Type markus:StatusCodeType}" >
16
            <markus:StatusCodeType>Error</markus:StatusCodeType>
17
            <markus:StatusCodeType>Completed</markus:StatusCodeType>
18
        </x:Array>
19
    </UserControl.Resources>
13 20
    <Grid>
14 21
        <Grid.RowDefinitions>
15 22
            <RowDefinition Height="3.5*"/>
......
21 28
        </GroupBox>
22 29
        <GroupBox  Header="Error Items" Grid.Row="1" Margin="3" BorderThickness="0">
23 30
            <Views:DataBaseByStatusView>
24
                <Behaviors:StatusTypeSet.StatusTypes>
25
                    <markus:StatusCodeType>Error</markus:StatusCodeType>
26
                </Behaviors:StatusTypeSet.StatusTypes>
31
                <i:Interaction.Behaviors>
32
                    <Behaviors:StatusTypeSet StatusTypes="{StaticResource FilterTypes}"/>
33
                </i:Interaction.Behaviors>
27 34
            </Views:DataBaseByStatusView>
28 35
        </GroupBox>
29 36
        <GroupBox Header="Completed Items"  Grid.Row="2" Margin="3" BorderThickness="0">
30 37
            <Views:DataBaseByStatusView>
31
                    <Behaviors:StatusTypeSet.StatusTypes>
38
                    <!--<Behaviors:StatusTypeSet.StatusTypes>
32 39
                        <markus:StatusCodeType>Error</markus:StatusCodeType>
33
                    </Behaviors:StatusTypeSet.StatusTypes>
40
                    </Behaviors:StatusTypeSet.StatusTypes>-->
34 41
            </Views:DataBaseByStatusView>
35 42
        </GroupBox>
36 43
        
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssDocumentInfo.PemssService.DocumentInfo.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="DocumentInfo" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
9
   <TypeInfo>PemssDocumentInfo.PemssService.DocumentInfo, Connected Services.PemssService.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
10
</GenericObjectDataSource>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssDocumentInfo.PemssService.Requirement.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="Requirement" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
9
   <TypeInfo>PemssDocumentInfo.PemssService.Requirement, Connected Services.PemssService.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
10
</GenericObjectDataSource>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssService.disco
1
<?xml version="1.0" encoding="utf-8"?>
2
<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
3
  <contractRef ref="http://localhost:13009/PemssService.svc?wsdl" docRef="http://localhost:13009/PemssService.svc" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
4
</discovery>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssService.wsdl
1
<?xml version="1.0" encoding="utf-8"?>
2
<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:tns="http://tempuri.org/" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PemssService" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
3
  <wsdl:import namespace="" location="http://localhost:13009/PemssService.svc?wsdl=wsdl0" />
4
  <wsdl:types />
5
  <wsdl:binding name="MarkusServiceEndPoint" type="PemssService">
6
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
7
    <wsdl:operation name="GetrequirementList">
8
      <soap:operation soapAction="urn:PemssService/GetrequirementList" style="document" />
9
      <wsdl:input>
10
        <soap:body use="literal" />
11
      </wsdl:input>
12
      <wsdl:output>
13
        <soap:body use="literal" />
14
      </wsdl:output>
15
    </wsdl:operation>
16
    <wsdl:operation name="SetRequirementComment">
17
      <soap:operation soapAction="urn:PemssService/SetRequirementComment" style="document" />
18
      <wsdl:input>
19
        <soap:body use="literal" />
20
      </wsdl:input>
21
      <wsdl:output>
22
        <soap:body use="literal" />
23
      </wsdl:output>
24
    </wsdl:operation>
25
    <wsdl:operation name="RemoveRequirementComment">
26
      <soap:operation soapAction="urn:PemssService/RemoveRequirementComment" style="document" />
27
      <wsdl:input>
28
        <soap:body use="literal" />
29
      </wsdl:input>
30
      <wsdl:output>
31
        <soap:body use="literal" />
32
      </wsdl:output>
33
    </wsdl:operation>
34
    <wsdl:operation name="GetDocumentInfo">
35
      <soap:operation soapAction="urn:PemssService/GetDocumentInfo" style="document" />
36
      <wsdl:input>
37
        <soap:body use="literal" />
38
      </wsdl:input>
39
      <wsdl:output>
40
        <soap:body use="literal" />
41
      </wsdl:output>
42
    </wsdl:operation>
43
  </wsdl:binding>
44
  <wsdl:service name="PemssService">
45
    <wsdl:port name="MarkusServiceEndPoint" binding="tns:MarkusServiceEndPoint">
46
      <soap:address location="http://localhost:13009/PemssService.svc" />
47
    </wsdl:port>
48
  </wsdl:service>
49
</wsdl:definitions>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssService.xsd
1
<?xml version="1.0" encoding="utf-8"?>
2
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
  <xs:complexType name="ArrayOfRequirement">
4
    <xs:sequence>
5
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Requirement" nillable="true" type="tns:Requirement" />
6
    </xs:sequence>
7
  </xs:complexType>
8
  <xs:element name="ArrayOfRequirement" nillable="true" type="tns:ArrayOfRequirement" />
9
  <xs:complexType name="Requirement">
10
    <xs:sequence>
11
      <xs:element minOccurs="0" name="mdId" nillable="true" type="xs:string" />
12
      <xs:element minOccurs="0" name="mdText" nillable="true" type="xs:string" />
13
      <xs:element minOccurs="0" name="mrComments" nillable="true" type="tns:ArrayOfCommant" />
14
    </xs:sequence>
15
  </xs:complexType>
16
  <xs:element name="Requirement" nillable="true" type="tns:Requirement" />
17
  <xs:complexType name="ArrayOfCommant">
18
    <xs:sequence>
19
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Commant" nillable="true" type="tns:Commant" />
20
    </xs:sequence>
21
  </xs:complexType>
22
  <xs:element name="ArrayOfCommant" nillable="true" type="tns:ArrayOfCommant" />
23
  <xs:complexType name="Commant">
24
    <xs:sequence>
25
      <xs:element minOccurs="0" name="comment" nillable="true" type="xs:string" />
26
      <xs:element minOccurs="0" name="created" nillable="true" type="xs:string" />
27
      <xs:element minOccurs="0" name="createdBy" nillable="true" type="xs:string" />
28
      <xs:element minOccurs="0" name="createdByName" nillable="true" type="xs:string" />
29
      <xs:element minOccurs="0" name="id" nillable="true" type="xs:string" />
30
      <xs:element minOccurs="0" name="modified" nillable="true" type="xs:string" />
31
      <xs:element minOccurs="0" name="modifiedBy" nillable="true" type="xs:string" />
32
      <xs:element minOccurs="0" name="modifiedByName" nillable="true" type="xs:string" />
33
    </xs:sequence>
34
  </xs:complexType>
35
  <xs:element name="Commant" nillable="true" type="tns:Commant" />
36
  <xs:complexType name="DocumentInfo">
37
    <xs:sequence>
38
      <xs:element minOccurs="0" name="dId" type="xs:int" />
39
      <xs:element minOccurs="0" name="docName" nillable="true" type="xs:string" />
40
      <xs:element minOccurs="0" name="fileName" nillable="true" type="xs:string" />
41
      <xs:element minOccurs="0" name="revision" nillable="true" type="xs:string" />
42
      <xs:element minOccurs="0" name="slipNo" nillable="true" type="xs:string" />
43
    </xs:sequence>
44
  </xs:complexType>
45
  <xs:element name="DocumentInfo" nillable="true" type="tns:DocumentInfo" />
46
</xs:schema>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssService1.wsdl
1
<?xml version="1.0" encoding="utf-8"?>
2
<wsdl:definitions xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
3
  <wsdl:types>
4
    <xsd:schema targetNamespace="/Imports">
5
      <xsd:import schemaLocation="http://localhost:13009/PemssService.svc?xsd=xsd0" />
6
      <xsd:import schemaLocation="http://localhost:13009/PemssService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
7
      <xsd:import schemaLocation="http://localhost:13009/PemssService.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel" />
8
    </xsd:schema>
9
  </wsdl:types>
10
  <wsdl:message name="PemssService_GetrequirementList_InputMessage">
11
    <wsdl:part name="parameters" element="GetrequirementList" />
12
  </wsdl:message>
13
  <wsdl:message name="PemssService_GetrequirementList_OutputMessage">
14
    <wsdl:part name="parameters" element="GetrequirementListResponse" />
15
  </wsdl:message>
16
  <wsdl:message name="PemssService_SetRequirementComment_InputMessage">
17
    <wsdl:part name="parameters" element="SetRequirementComment" />
18
  </wsdl:message>
19
  <wsdl:message name="PemssService_SetRequirementComment_OutputMessage">
20
    <wsdl:part name="parameters" element="SetRequirementCommentResponse" />
21
  </wsdl:message>
22
  <wsdl:message name="PemssService_RemoveRequirementComment_InputMessage">
23
    <wsdl:part name="parameters" element="RemoveRequirementComment" />
24
  </wsdl:message>
25
  <wsdl:message name="PemssService_RemoveRequirementComment_OutputMessage">
26
    <wsdl:part name="parameters" element="RemoveRequirementCommentResponse" />
27
  </wsdl:message>
28
  <wsdl:message name="PemssService_GetDocumentInfo_InputMessage">
29
    <wsdl:part name="parameters" element="GetDocumentInfo" />
30
  </wsdl:message>
31
  <wsdl:message name="PemssService_GetDocumentInfo_OutputMessage">
32
    <wsdl:part name="parameters" element="GetDocumentInfoResponse" />
33
  </wsdl:message>
34
  <wsdl:portType name="PemssService">
35
    <wsdl:operation name="GetrequirementList">
36
      <wsdl:input wsaw:Action="urn:PemssService/GetrequirementList" message="PemssService_GetrequirementList_InputMessage" />
37
      <wsdl:output wsaw:Action="urn:PemssService/GetrequirementListResponse" message="PemssService_GetrequirementList_OutputMessage" />
38
    </wsdl:operation>
39
    <wsdl:operation name="SetRequirementComment">
40
      <wsdl:input wsaw:Action="urn:PemssService/SetRequirementComment" message="PemssService_SetRequirementComment_InputMessage" />
41
      <wsdl:output wsaw:Action="urn:PemssService/SetRequirementCommentResponse" message="PemssService_SetRequirementComment_OutputMessage" />
42
    </wsdl:operation>
43
    <wsdl:operation name="RemoveRequirementComment">
44
      <wsdl:input wsaw:Action="urn:PemssService/RemoveRequirementComment" message="PemssService_RemoveRequirementComment_InputMessage" />
45
      <wsdl:output wsaw:Action="urn:PemssService/RemoveRequirementCommentResponse" message="PemssService_RemoveRequirementComment_OutputMessage" />
46
    </wsdl:operation>
47
    <wsdl:operation name="GetDocumentInfo">
48
      <wsdl:input wsaw:Action="urn:PemssService/GetDocumentInfo" message="PemssService_GetDocumentInfo_InputMessage" />
49
      <wsdl:output wsaw:Action="urn:PemssService/GetDocumentInfoResponse" message="PemssService_GetDocumentInfo_OutputMessage" />
50
    </wsdl:operation>
51
  </wsdl:portType>
52
</wsdl:definitions>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssService1.xsd
1
<?xml version="1.0" encoding="utf-8"?>
2
<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
  <xs:element name="anyType" nillable="true" type="xs:anyType" />
4
  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
5
  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
6
  <xs:element name="boolean" nillable="true" type="xs:boolean" />
7
  <xs:element name="byte" nillable="true" type="xs:byte" />
8
  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
9
  <xs:element name="decimal" nillable="true" type="xs:decimal" />
10
  <xs:element name="double" nillable="true" type="xs:double" />
11
  <xs:element name="float" nillable="true" type="xs:float" />
12
  <xs:element name="int" nillable="true" type="xs:int" />
13
  <xs:element name="long" nillable="true" type="xs:long" />
14
  <xs:element name="QName" nillable="true" type="xs:QName" />
15
  <xs:element name="short" nillable="true" type="xs:short" />
16
  <xs:element name="string" nillable="true" type="xs:string" />
17
  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
18
  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
19
  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
20
  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
21
  <xs:element name="char" nillable="true" type="tns:char" />
22
  <xs:simpleType name="char">
23
    <xs:restriction base="xs:int" />
24
  </xs:simpleType>
25
  <xs:element name="duration" nillable="true" type="tns:duration" />
26
  <xs:simpleType name="duration">
27
    <xs:restriction base="xs:duration">
28
      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
29
      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
30
      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
31
    </xs:restriction>
32
  </xs:simpleType>
33
  <xs:element name="guid" nillable="true" type="tns:guid" />
34
  <xs:simpleType name="guid">
35
    <xs:restriction base="xs:string">
36
      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
37
    </xs:restriction>
38
  </xs:simpleType>
39
  <xs:attribute name="FactoryType" type="xs:QName" />
40
  <xs:attribute name="Id" type="xs:ID" />
41
  <xs:attribute name="Ref" type="xs:IDREF" />
42
</xs:schema>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/PemssService2.xsd
1
<?xml version="1.0" encoding="utf-8"?>
2
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
  <xs:import schemaLocation="http://localhost:13009/PemssService.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel" />
4
  <xs:element name="GetrequirementList">
5
    <xs:complexType>
6
      <xs:sequence>
7
        <xs:element minOccurs="0" name="pId" nillable="true" type="xs:string" />
8
        <xs:element minOccurs="0" name="dId" nillable="true" type="xs:string" />
9
      </xs:sequence>
10
    </xs:complexType>
11
  </xs:element>
12
  <xs:element name="GetrequirementListResponse">
13
    <xs:complexType>
14
      <xs:sequence>
15
        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel" minOccurs="0" name="GetrequirementListResult" nillable="true" type="q1:ArrayOfRequirement" />
16
      </xs:sequence>
17
    </xs:complexType>
18
  </xs:element>
19
  <xs:element name="SetRequirementComment">
20
    <xs:complexType>
21
      <xs:sequence>
22
        <xs:element minOccurs="0" name="pId" nillable="true" type="xs:string" />
23
        <xs:element minOccurs="0" name="dId" nillable="true" type="xs:string" />
24
        <xs:element minOccurs="0" name="mdId" nillable="true" type="xs:string" />
25
        <xs:element minOccurs="0" name="commentId" nillable="true" type="xs:string" />
26
        <xs:element minOccurs="0" name="comment" nillable="true" type="xs:string" />
27
        <xs:element minOccurs="0" name="condition" type="xs:boolean" />
28
        <xs:element minOccurs="0" name="uId" nillable="true" type="xs:string" />
29
      </xs:sequence>
30
    </xs:complexType>
31
  </xs:element>
32
  <xs:element name="SetRequirementCommentResponse">
33
    <xs:complexType>
34
      <xs:sequence>
35
        <xs:element minOccurs="0" name="SetRequirementCommentResult" type="xs:boolean" />
36
      </xs:sequence>
37
    </xs:complexType>
38
  </xs:element>
39
  <xs:element name="RemoveRequirementComment">
40
    <xs:complexType>
41
      <xs:sequence>
42
        <xs:element minOccurs="0" name="pId" nillable="true" type="xs:string" />
43
        <xs:element minOccurs="0" name="dId" nillable="true" type="xs:string" />
44
        <xs:element minOccurs="0" name="mdId" nillable="true" type="xs:string" />
45
        <xs:element minOccurs="0" name="commentId" nillable="true" type="xs:string" />
46
        <xs:element minOccurs="0" name="uId" nillable="true" type="xs:string" />
47
      </xs:sequence>
48
    </xs:complexType>
49
  </xs:element>
50
  <xs:element name="RemoveRequirementCommentResponse">
51
    <xs:complexType>
52
      <xs:sequence>
53
        <xs:element minOccurs="0" name="RemoveRequirementCommentResult" type="xs:boolean" />
54
      </xs:sequence>
55
    </xs:complexType>
56
  </xs:element>
57
  <xs:element name="GetDocumentInfo">
58
    <xs:complexType>
59
      <xs:sequence>
60
        <xs:element minOccurs="0" name="pId" nillable="true" type="xs:string" />
61
        <xs:element minOccurs="0" name="dId" nillable="true" type="xs:string" />
62
      </xs:sequence>
63
    </xs:complexType>
64
  </xs:element>
65
  <xs:element name="GetDocumentInfoResponse">
66
    <xs:complexType>
67
      <xs:sequence>
68
        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel" minOccurs="0" name="GetDocumentInfoResult" nillable="true" type="q2:DocumentInfo" />
69
      </xs:sequence>
70
    </xs:complexType>
71
  </xs:element>
72
</xs:schema>
ConvertService/ServiceBase/PemssDocumentInfo/Connected Services/PemssService/Reference.cs
1
//------------------------------------------------------------------------------
2
// <auto-generated>
3
//     이 코드는 도구를 사용하여 생성되었습니다.
4
//     런타임 버전:4.0.30319.42000
5
//
6
//     파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
7
//     이러한 변경 내용이 손실됩니다.
8
// </auto-generated>
9
//------------------------------------------------------------------------------
10

  
11
namespace PemssDocumentInfo.PemssService {
12
    using System.Runtime.Serialization;
13
    using System;
14
    
15
    
16
    [System.Diagnostics.DebuggerStepThroughAttribute()]
17
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
18
    [System.Runtime.Serialization.DataContractAttribute(Name="Requirement", Namespace="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel")]
19
    [System.SerializableAttribute()]
20
    public partial class Requirement : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
21
        
22
        [System.NonSerializedAttribute()]
23
        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
24
        
25
        [System.Runtime.Serialization.OptionalFieldAttribute()]
26
        private string mdIdField;
27
        
28
        [System.Runtime.Serialization.OptionalFieldAttribute()]
29
        private string mdTextField;
30
        
31
        [System.Runtime.Serialization.OptionalFieldAttribute()]
32
        private System.Collections.Generic.List<PemssDocumentInfo.PemssService.Commant> mrCommentsField;
33
        
34
        [global::System.ComponentModel.BrowsableAttribute(false)]
35
        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
36
            get {
37
                return this.extensionDataField;
38
            }
39
            set {
40
                this.extensionDataField = value;
41
            }
42
        }
43
        
44
        [System.Runtime.Serialization.DataMemberAttribute()]
45
        public string mdId {
46
            get {
47
                return this.mdIdField;
48
            }
49
            set {
50
                if ((object.ReferenceEquals(this.mdIdField, value) != true)) {
51
                    this.mdIdField = value;
52
                    this.RaisePropertyChanged("mdId");
53
                }
54
            }
55
        }
56
        
57
        [System.Runtime.Serialization.DataMemberAttribute()]
58
        public string mdText {
59
            get {
60
                return this.mdTextField;
61
            }
62
            set {
63
                if ((object.ReferenceEquals(this.mdTextField, value) != true)) {
64
                    this.mdTextField = value;
65
                    this.RaisePropertyChanged("mdText");
66
                }
67
            }
68
        }
69
        
70
        [System.Runtime.Serialization.DataMemberAttribute()]
71
        public System.Collections.Generic.List<PemssDocumentInfo.PemssService.Commant> mrComments {
72
            get {
73
                return this.mrCommentsField;
74
            }
75
            set {
76
                if ((object.ReferenceEquals(this.mrCommentsField, value) != true)) {
77
                    this.mrCommentsField = value;
78
                    this.RaisePropertyChanged("mrComments");
79
                }
80
            }
81
        }
82
        
83
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
84
        
85
        protected void RaisePropertyChanged(string propertyName) {
86
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
87
            if ((propertyChanged != null)) {
88
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
89
            }
90
        }
91
    }
92
    
93
    [System.Diagnostics.DebuggerStepThroughAttribute()]
94
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
95
    [System.Runtime.Serialization.DataContractAttribute(Name="Commant", Namespace="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel")]
96
    [System.SerializableAttribute()]
97
    public partial class Commant : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
98
        
99
        [System.NonSerializedAttribute()]
100
        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
101
        
102
        [System.Runtime.Serialization.OptionalFieldAttribute()]
103
        private string commentField;
104
        
105
        [System.Runtime.Serialization.OptionalFieldAttribute()]
106
        private string createdField;
107
        
108
        [System.Runtime.Serialization.OptionalFieldAttribute()]
109
        private string createdByField;
110
        
111
        [System.Runtime.Serialization.OptionalFieldAttribute()]
112
        private string createdByNameField;
113
        
114
        [System.Runtime.Serialization.OptionalFieldAttribute()]
115
        private string idField;
116
        
117
        [System.Runtime.Serialization.OptionalFieldAttribute()]
118
        private string modifiedField;
119
        
120
        [System.Runtime.Serialization.OptionalFieldAttribute()]
121
        private string modifiedByField;
122
        
123
        [System.Runtime.Serialization.OptionalFieldAttribute()]
124
        private string modifiedByNameField;
125
        
126
        [global::System.ComponentModel.BrowsableAttribute(false)]
127
        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
128
            get {
129
                return this.extensionDataField;
130
            }
131
            set {
132
                this.extensionDataField = value;
133
            }
134
        }
135
        
136
        [System.Runtime.Serialization.DataMemberAttribute()]
137
        public string comment {
138
            get {
139
                return this.commentField;
140
            }
141
            set {
142
                if ((object.ReferenceEquals(this.commentField, value) != true)) {
143
                    this.commentField = value;
144
                    this.RaisePropertyChanged("comment");
145
                }
146
            }
147
        }
148
        
149
        [System.Runtime.Serialization.DataMemberAttribute()]
150
        public string created {
151
            get {
152
                return this.createdField;
153
            }
154
            set {
155
                if ((object.ReferenceEquals(this.createdField, value) != true)) {
156
                    this.createdField = value;
157
                    this.RaisePropertyChanged("created");
158
                }
159
            }
160
        }
161
        
162
        [System.Runtime.Serialization.DataMemberAttribute()]
163
        public string createdBy {
164
            get {
165
                return this.createdByField;
166
            }
167
            set {
168
                if ((object.ReferenceEquals(this.createdByField, value) != true)) {
169
                    this.createdByField = value;
170
                    this.RaisePropertyChanged("createdBy");
171
                }
172
            }
173
        }
174
        
175
        [System.Runtime.Serialization.DataMemberAttribute()]
176
        public string createdByName {
177
            get {
178
                return this.createdByNameField;
179
            }
180
            set {
181
                if ((object.ReferenceEquals(this.createdByNameField, value) != true)) {
182
                    this.createdByNameField = value;
183
                    this.RaisePropertyChanged("createdByName");
184
                }
185
            }
186
        }
187
        
188
        [System.Runtime.Serialization.DataMemberAttribute()]
189
        public string id {
190
            get {
191
                return this.idField;
192
            }
193
            set {
194
                if ((object.ReferenceEquals(this.idField, value) != true)) {
195
                    this.idField = value;
196
                    this.RaisePropertyChanged("id");
197
                }
198
            }
199
        }
200
        
201
        [System.Runtime.Serialization.DataMemberAttribute()]
202
        public string modified {
203
            get {
204
                return this.modifiedField;
205
            }
206
            set {
207
                if ((object.ReferenceEquals(this.modifiedField, value) != true)) {
208
                    this.modifiedField = value;
209
                    this.RaisePropertyChanged("modified");
210
                }
211
            }
212
        }
213
        
214
        [System.Runtime.Serialization.DataMemberAttribute()]
215
        public string modifiedBy {
216
            get {
217
                return this.modifiedByField;
218
            }
219
            set {
220
                if ((object.ReferenceEquals(this.modifiedByField, value) != true)) {
221
                    this.modifiedByField = value;
222
                    this.RaisePropertyChanged("modifiedBy");
223
                }
224
            }
225
        }
226
        
227
        [System.Runtime.Serialization.DataMemberAttribute()]
228
        public string modifiedByName {
229
            get {
230
                return this.modifiedByNameField;
231
            }
232
            set {
233
                if ((object.ReferenceEquals(this.modifiedByNameField, value) != true)) {
234
                    this.modifiedByNameField = value;
235
                    this.RaisePropertyChanged("modifiedByName");
236
                }
237
            }
238
        }
239
        
240
        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
241
        
242
        protected void RaisePropertyChanged(string propertyName) {
243
            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
244
            if ((propertyChanged != null)) {
245
                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
246
            }
247
        }
248
    }
249
    
250
    [System.Diagnostics.DebuggerStepThroughAttribute()]
251
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
252
    [System.Runtime.Serialization.DataContractAttribute(Name="DocumentInfo", Namespace="http://schemas.datacontract.org/2004/07/PemssAPI.DataModel")]
253
    [System.SerializableAttribute()]
254
    public partial class DocumentInfo : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
255
        
256
        [System.NonSerializedAttribute()]
257
        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
258
        
259
        [System.Runtime.Serialization.OptionalFieldAttribute()]
260
        private int dIdField;
261
        
262
        [System.Runtime.Serialization.OptionalFieldAttribute()]
263
        private string docNameField;
264
        
265
        [System.Runtime.Serialization.OptionalFieldAttribute()]
266
        private string fileNameField;
267
        
268
        [System.Runtime.Serialization.OptionalFieldAttribute()]
269
        private string revisionField;
270
        
271
        [System.Runtime.Serialization.OptionalFieldAttribute()]
272
        private string slipNoField;
273
        
274
        [global::System.ComponentModel.BrowsableAttribute(false)]
275
        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
276
            get {
277
                return this.extensionDataField;
278
            }
279
            set {
280
                this.extensionDataField = value;
281
            }
282
        }
283
        
284
        [System.Runtime.Serialization.DataMemberAttribute()]
285
        public int dId {
286
            get {
287
                return this.dIdField;
288
            }
289
            set {
290
                if ((this.dIdField.Equals(value) != true)) {
291
                    this.dIdField = value;
292
                    this.RaisePropertyChanged("dId");
293
                }
294
            }
295
        }
296
        
297
        [System.Runtime.Serialization.DataMemberAttribute()]
298
        public string docName {
299
            get {
300
                return this.docNameField;
301
            }
302
            set {
303
                if ((object.ReferenceEquals(this.docNameField, value) != true)) {
304
                    this.docNameField = value;
305
                    this.RaisePropertyChanged("docName");
306
                }
307
            }
308
        }
309
        
310
        [System.Runtime.Serialization.DataMemberAttribute()]
311
        public string fileName {
312
            get {
313
                return this.fileNameField;
314
            }
315
            set {
... 이 차이점은 표시할 수 있는 최대 줄수를 초과해서 이 차이점은 잘렸습니다.

내보내기 Unified diff

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