Загрузка в домен под WebService'ом
От: Hipson  
Дата: 22.10.07 15:11
Оценка:
Всем привет!
Значит есть такая dll:



using System;
using System.Collections.Generic;
using System.Text;

namespace Proba248
{
    public class MyClass1 : MarshalByRefObject
    {
        public string MyClassTest1()
        {
            return "Ok :-)";
        }
    }
}




и WinForms-приложение, которое загружает её в другой домен:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Proba248;

namespace Proba250
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            AppDomain domain = AppDomain.CreateDomain("MyDomain1");

            MyClass1 mc1 = (MyClass1)Activator.CreateInstance(
                domain, typeof(MyClass1).Assembly.FullName, typeof(MyClass1).FullName).Unwrap();

            Text = mc1.MyClassTest1();
        }
    }
}



всё работает нормально. Но если мы попытаемся исполнить тот же код в WebService'е:



using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using Proba248;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
    public Service () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string Test1()
    {
        AppDomain domain = AppDomain.CreateDomain("MyDomain1");

        MyClass1 mc1 = (MyClass1)Activator.CreateInstance(
            domain, typeof(MyClass1).Assembly.FullName, typeof(MyClass1).FullName).Unwrap();

        return mc1.MyClassTest1();
    }
}



то получим ошибку:



System.IO.FileNotFoundException: Could not load file or assembly 'Proba248, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.


А если заменить строку создания домена на использование текущего:





        //AppDomain domain = AppDomain.CreateDomain("MyDomain1");
        AppDomain domain = AppDomain.CurrentDomain;



то опять всё работает хорошо.
Вопрос: как под WebService'ом загрузить сборку в другой домен и создать там объект?
Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.