2010-06-24 4 views
1

특정 위치에서 여러 DLL을로드하고 특정 TCP 포트에서 Remoting을 사용하여 게시 할 수있는 Window Service를 만들고 싶습니다 (9000).C# Windows 서비스 및 원격

각 DLL에는 게시 될 단일 클래스가 들어 있습니다. 예를 들어

(Test.dll에)

namespace Test 
{ 
    class Service 
    { 
    // methods here 
    } 
} 

이 서비스는 원격 내가 원격을 사용하지만 있도록 서비스를 구현하는 방법을 알고 싶습니다 방법을 알고 tcp://<servername>:9000/Test.dll

를 사용하여 게시해야 DLL을 시작할 때 동적으로로드하고 중지 할 때 DLL을 언로드 할 수 있습니다.

다른 방법이있을 수 있습니까?

답변

0

강력한 솔루션을 찾으려면 MEF, Managed Extensibility Framework를 살펴보십시오. 그러나, 당신은 그냥 간단한 플러그인으로 DLL을로드하려면

, 내 TournamentApi에서 몇 가지 코드 샘플이이 어셈블리의 각 IPluginEnumerator의 인스턴스를로드 된 어셈블리를 취하고 인스턴스화

/// <summary> 
/// Provides methods to load plugins from external assemblies. 
/// </summary> 
public static class PluginLoader 
{ 
    ... 

    /// <summary> 
    /// Loads the plugins from a specified assembly. 
    /// </summary> 
    /// <param name="assembly">The assembly from which to load.</param> 
    /// <returns>The plugin factories contained in the assembly, if the load was successful; null, otherwise.</returns> 
    public static IEnumerable<IPluginFactory> LoadPlugins(Assembly assembly) 
    { 
     var factories = new List<IPluginFactory>(); 

     try 
     { 
      foreach (var type in assembly.GetTypes()) 
      { 
       IPluginEnumerator instance = null; 

       if (type.GetInterface("IPluginEnumerator") != null) 
       { 
        instance = (IPluginEnumerator)Activator.CreateInstance(type); 
       } 

       if (instance != null) 
       { 
        factories.AddRange(instance.EnumerateFactories()); 
       } 
      } 
     } 
     catch (SecurityException ex) 
     { 
      throw new LoadPluginsFailureException("Loading of plugins failed. Check the inner exception for more details.", ex); 
     } 
     catch (ReflectionTypeLoadException ex) 
     { 
      throw new LoadPluginsFailureException("Loading of plugins failed. Check the inner exception for more details.", ex); 
     } 

     return factories.AsReadOnly(); 
    } 
} 

지원하는 IPluginFactory (Abstract Factory)을 반환해야합니다.

나머지 코드는 TournamentApi 프로젝트의 소스 코드를 살펴보십시오.