سؤال

أنا بناء التطبيق الذي يستخدم سيرفيسستاك ل أبي ريستفول.أحاول دمج سيغنالر لميزات الوقت الحقيقي ، حيث سيتم تشغيل هذا التطبيق على سطح المكتب العميل.الاقتراع الطويل أو أي عمل من هذا القبيل ليس خيارا.المتطلبات هي تطبيق وحدة التحكم ، سيرفيسستاك ، سيغنالر.هل من الممكن أن يكون سيغنالر و سيرفيسستاك الذاتي استضافت معا?

ضع في اعتبارك ما يلي (تطبيق وحدة التحكم الكل في واحد):

بدء التشغيل.جيم >>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Microsoft.Owin.Cors;
using Owin;

namespace RazorRockstars.SelfHost
{
    public class StartUp
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
}

أبهوست.جيم >>

namespace RazorRockstars.SelfHost
{
    public class AppHost : AppHostHttpListenerBase
    {
        public AppHost() : base("Test Razor", typeof(AppHost).Assembly) { }

        public override void Configure(Container container)
        {
            LogManager.LogFactory = new ConsoleLogFactory();

            Plugins.Add(new RazorFormat());

            container.Register<IDbConnectionFactory>(
                new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider));

            using (var db = container.Resolve<IDbConnectionFactory>().OpenDbConnection())
            {
                db.CreateTableIfNotExists<Rockstar>();
                db.InsertAll(RockstarsService.SeedData);
            }

            this.CustomErrorHttpHandlers[HttpStatusCode.NotFound] = new RazorHandler("/notfound");
            this.CustomErrorHttpHandlers[HttpStatusCode.Unauthorized] = new RazorHandler("/login");
        }
    }
}

البرنامج.جيم >>

    using System.Threading;
    using Microsoft.Owin.Hosting;
    using ServiceStack.Logging;
    using ServiceStack.Text;

    namespace RazorRockstars.SelfHost
    {
        class Program
        {
            static void Main(string[] args)
            {
                string listingUrl = "http://*:2001/";
                string listingUrl2 = "http://*:2002/";
                LogManager.LogFactory = new ConsoleLogFactory();

                var appHost = new AppHost();
                appHost.Init();

                appHost.Start(listingUrl);
// the next line will result in error: "The process cannot access the file because it is being used by another process"

                WebApp.Start<StartUp>(listingUrl2);

                "\n\nListening on http://*:2001/..".Print();
                "Type Ctrl+C to quit..".Print();
                Thread.Sleep(Timeout.Infinite);
            }
        }
    }

إذا كنت ترغب في تجربة هذا التحدي بنفسك ، فما عليك سوى الحصول على نسخة من https://github.com/ServiceStack/RazorRockstars/tree/master/src/RazorRockstars.SelfHost ومحاولة الحصول عليه للعمل.

أي مساعدة مع هذا دعابة الدماغ من شأنه أن يساعد كثيرا.

الأهم من ذلك ، أنا أتطلع إلى معرفة ما إذا كان هذا ممكنا أم لا.

هل كانت مفيدة؟

المحلول

بناء على مشروع نجم الروك هذا.لقد قمت بتثبيت حزمة نوجيت التالية:

Install-Package Microsoft.AspNet.SignalR.SelfHost

اختياري إذا كنت تريد كورس:

Install-Package Microsoft.Owin.Cors

هنا هو بلدي Program.cs ملف:

class Program
{
    static void Main(string[] args)
    {
        LogManager.LogFactory = new ConsoleLogFactory();

        var appHost = new AppHost();
        appHost.Init();
        appHost.Start("http://*:2001/");

        using (WebApp.Start<Startup>("http://*:2002/"))
        {
            "\n\nListening on http://*:2001/..".Print();
            "SignalR listening on http://*:2002/".Print();
            "\n\nType Ctrl+C to quit..".Print();
            Thread.Sleep(Timeout.Infinite);
        }
    }
}

class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Map("/signalr", map =>
        {
            map.UseCors(CorsOptions.AllowAll);

            var hubConfiguration = new HubConfiguration
            {
                EnableDetailedErrors = true,
                EnableJSONP = true
            };

            map.RunSignalR(hubConfiguration);
        });
    }
}

enter image description here

أنا مكنت كورس وسمح جسونب ، وهذا متروك لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top