2012-10-30 57 views
-2

我有一個帶有服務庫的WCF服務。我想在一個新的AppDomain中創建一個類庫的實例,但這會引發異常:在AppDomain中加載WCF庫時無法加載文件或程序集

無法加載文件或程序集「ClassLibrary1.dll」或其某個依賴項。

//Class library 
public class Class1 : MarshalByRefObject 
{  
     public string Method1(int i) 
     { 
      return "int=" + i; 
     } 
} 

//Class WCF Service 
public class Service1 : IService1 
{ 
    public string GetData(int value) 
    { 
      string name = typeof(Class1).Assembly.GetName().FullName; 
      string type_name = typeof(Class1).FullName; 
      var _Dom = AppDomain.CreateDomain("SubDomain", null, info); 

      //why is it not working? 
      //exception - not found assembly file 
      var _Factory = _Dom.CreateInstanceAndUnwrap(name, type_name) as Class1; 

      //it's worked 
      //var _Factory = AppDomain.CurrentDomain.CreateInstanceAndUnwrap(name, type_name) as Class1; 

      return _Factory.Method1(value); 
    } 
} 

//Client method to service 
static void Main(string[] args) 
{ 
    using (Service1Client cc = new Service1Client()) 
    { 
     Console.WriteLine("Client opened."); 
     Console.Write("Enter integer: "); 

     int i = 0; 
     int.TryParse(Console.ReadLine(), out i); 
     try 
     { 
      var r = cc.GetData(i); 
      Console.WriteLine(r); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     cc.Close(); 
     Console.WriteLine("Client closed. Press Enter key to exit..."); 
     Console.ReadLine(); 
    } 
} 

Link to solution

+0

你應該可能會解決您的questi的一些問題上。首先,請不要只鏈接到其他網站上的解決方案,而是在問題中添加相關代碼片段。其次,告訴我們你試圖解決這個問題的原因,以及爲什麼它不起作用。請注意,您可以隨時編輯您的問題。 – Jeroen

+0

它告訴你什麼裝配不能被加載。請提供完整的例外信息 –

+0

您的某個引用不存在於您期望的位置。如果這是同一臺機器 - 請檢查您是否沒有引用位於某處的obj/debug文件夾中的一個 - 如果這是一臺單獨的機器(可能是構建服務器) - 請檢查您是否引用了本地版本而非gac版本。 (單擊參考並查看VS中其屬性下的文件路徑) – Chris

回答

0

//自託管解決解決這個問題,這個問題

Uri url = new Uri("http://localhost:7777/Service1"); 
using (ServiceHost host = new ServiceHost(typeof(Service1), url)) 
{ 
    host.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), ""); 
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
    smb.HttpGetEnabled = true; 
    host.Description.Behaviors.Add(smb); 
    host.Open(); 
} 
0

設置的AppDomain基地和相對目錄至少對我來說

string basePath = AppDomain.CurrentDomain.BaseDirectory; 
string relativePath = AppDomain.CurrentDomain.RelativeSearchPath; 
m_domain = AppDomain.CreateDomain("MyDomain", null, basePath, relativePath, false); 
相關問題