Comments 12
Я раньше хотел использовать кассини для того чтобы WinForms приложение было одновременно и веб сервером.
Понял, что с кассини уж слишком много проблем, и заюзал Mono XSP (Mono.WebServer2).
Кстати, вот пример того, как можно в GAC зарегистрировать необходимую DLL с сервером:
Понял, что с кассини уж слишком много проблем, и заюзал Mono XSP (Mono.WebServer2).
Кстати, вот пример того, как можно в GAC зарегистрировать необходимую DLL с сервером:
using System.EnterpriseServices.Internal;
public static void GacRegisterHost()
{
Publish pub = new Publish();
pub.GacInstall(AppDomain.CurrentDomain.BaseDirectory + @"\Mono.Security.dll");
pub.GacInstall(AppDomain.CurrentDomain.BaseDirectory + @"\Mono.Security.Win32.dll");
pub.GacInstall(AppDomain.CurrentDomain.BaseDirectory + @"\Mono.WebServer2.dll");
}
P.S. Подпишитесь на вот этот блог habrahabr.ru/blogs/net/
перенесите ваш топик туда и сделайте его открытым.
перенесите ваш топик туда и сделайте его открытым.
в GAC регистрировать необязательно, см: cassinipp.codeplex.com/
Это другая инкарнация Кассини — от Робсмана. В статье рассматривается Кассини из поставки Visual Studio 2010.
P.S.: сборка по вашей ссылке (http://cassinidev.codeplex.com/) тоже умеет работать без регистрации в Москве в GAC
Точно. Спасибо за наводку. Единственное что я могу сказать, что таки проблему с регистрацией GACке Cassini++ решил, но какой ценой… ценой черной магии ;)
Привожу код решения:
\src\Cassini++\WebServer\Server.cs
Привожу код решения:
\src\Cassini++\WebServer\Server.cs
private static Host CreateWorkerAppDomainWithHost(string virtualPath, string physicalPath)
{
var hostType = typeof(Host);
// this creates worker app domain in a way that host doesn't need to be in GAC or bin
// using BuildManagerHost via private reflection
string uniqueAppString = string.Concat(virtualPath, physicalPath).ToLowerInvariant();
string appId = (uniqueAppString.GetHashCode()).ToString("x", CultureInfo.InvariantCulture);
// create BuildManagerHost in the worker app domain
var appManager = ApplicationManager.GetApplicationManager();
var buildManagerHostType = typeof (HttpRuntime).Assembly.GetType("System.Web.Compilation.BuildManagerHost");
var buildManagerHost = appManager.CreateObject(appId, buildManagerHostType, virtualPath, physicalPath, false);
// call BuildManagerHost.RegisterAssembly to make Host type loadable in the worker app domain
buildManagerHostType.InvokeMember(
"RegisterAssembly",
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic,
null,
buildManagerHost,
new object[2] {hostType.Assembly.FullName, hostType.Assembly.Location});
// create Host in the worker app domain
return (Host)appManager.CreateObject(appId, hostType, virtualPath, physicalPath, false);
}
Теперь как вариант можно брать IIS Express.
Запускаю последнюю сборку, сжирает всю память создавая несколько сотен процессов себя, система перестает отзываться, потом тихо умирает и завершается :)
Еще в список отличий: Cassini не поддерживает ipv6, потому что выполняет bind хардкодом на 127.0.0.1
Sign up to leave a comment.
Мой опыт работы с веб-сервером Cassini от Microsoft