2015-10-22 7 views
9

मैं एक विंडोज सेवा बनाना चाहता था जो स्वयं-होस्ट एएसपी.नेट वेब एपीआई के माध्यम से कुछ सेवाएं प्रदान करता है। साथ ही, मैं ग्राहकों को स्व-होस्ट सिग्नलआर के माध्यम से कुछ बदलावों के बारे में सूचित करना चाहता था। मैंने सोचा कि एएसपी.NET सिग्नलर अधिसूचना केंद्र के लिए एकदम सही समाधान होगा।सेल्फ-होस्ट एएसपी.नेट वेब एपीआई और सेल्फ-होस्ट सिग्नलआर एक साथ विंडोज सर्विस एप्लिकेशन

जब मैं दोनों सेवा चलाता हूं तो वे एक साथ काम नहीं करते हैं। अगर मैं सिग्नलआर हटा देता हूं, तो स्व-होस्ट एपीआई पूरी तरह से काम करना शुरू कर देता है। दूसरी तरफ भी: विंडोज़ सेवा को हटाएं, और सिग्नलआर पूरी तरह से काम करें।

मुझे यकीन नहीं है कि मेरी समस्या क्या है, क्या विंडोज़ सेवा होना संभव है जो एक ही समय में एएसपीनेट वेब एपीआई और सिग्नलआर के लिए स्वयं-होस्ट किया गया है?

मैंने दोनों एक ही और अलग बंदरगाहों पर कोशिश की लेकिन यह काम नहीं करता है।

और दूसरा सवाल, क्या दोनों एक ही बंदरगाह पर होना संभव है?

मेरे इंस्टॉल किए गए पैकेज: - ApiControllers और उसी URI पर Signalr हब

Microsoft.AspNet.WebApi.SelfHost 
Microsoft.AspNet.SignalR.SelfHost 
Microsoft.AspNet.WebApi.Owin 
Microsoft.Owin.Host.HttpListener 
Microsoft.Owin.Hosting 
Microsoft.Owin.Cors 

मेरे कोड

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Diagnostics; 
using System.IO; 
using System.Linq; 
using System.ServiceProcess; 
using System.Text; 
using System.Threading.Tasks; 
using System.Web.Http; 
using System.Web.Http.SelfHost; 

using Microsoft.AspNet.SignalR; 
using Microsoft.Owin.Hosting; 
using Owin; 
using Microsoft.Owin.Cors; 
using Microsoft.Owin; 

[assembly: OwinStartup(typeof(WindowsService_HostAPI.Startup))] 
namespace WindowsService_HostAPI 
{ 
    partial class SelfHostService : ServiceBase 
    { 
     IDisposable SignalR; 

     EventLog myLog = new EventLog(); 
     private const string appId = "MYHUB"; 
     public SelfHostService() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      myLog.Source = "MY HUB "; 
      var config = new HttpSelfHostConfiguration("http://localhost:9090"); 

      config.Routes.MapHttpRoute(
       name: "API", 
       routeTemplate: "{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      HttpSelfHostServer server = new HttpSelfHostServer(config); 



      string CertLocation = ""; 
      server.OpenAsync().Wait(); 
      try 
      { 


       myLog.WriteEntry("Notification HUB Start "); 
      } 
      catch (Exception ex) 
      { 
       myLog.WriteEntry("Notification Failed TO Start : " + ex.Message + " |||| " + CertLocation); 
      } 
      // SignalR 
      string url = "http://localhost:9191"; 
      SignalR = WebApp.Start(url); 

     } 

     protected override void OnStop() 
     { 
      // TODO: Add code here to perform any tear-down necessary to stop your service. 
      try 
      { 
       push.StopAllServices(true); 
       SignalR.Dispose(); 
      } 
      catch (Exception ex) 
      { 
       myLog.WriteEntry("Notification Failed TO Stop : " + ex.Message); 
      } 

     } 
    } 
    class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.UseCors(CorsOptions.AllowAll); 
      app.MapSignalR(); 
     } 
    } 
    public class UserGroupNotification : Hub 
    { 
     public void Send(string UGID, string message) 
     { 

      Clients.All.addMessage(UGID, message); 
     } 


    } 
} 
+1

http://www.codeproject.com/Articles/869223/ASP-NET-Web-Api-Create-a-Self-Hosted-:

यहाँ कैसे मैं अपने config में ऐसा है ओविन-आधारित-हम –

उत्तर

2

मैं बस अपना एपीआई में से एक पर इस तरह के एक विन्यास चलाते हैं। मुझे लगता है कि आपकी समस्या app.MapSignalR() टुकड़ा के साथ है।

public void Configuration(IAppBuilder appBuilder) 
{ 
    var config = new HttpConfiguration(); 

    //I use attribute-based routing for ApiControllers 
    config.MapHttpAttributeRoutes(); 

    appBuilder.Map("/signalr", map => 
    { 
     var hubConfiguration = new HubConfiguration 
     { 

     }; 

     map.RunSignalR(hubConfiguration); 
    }); 

    config.EnsureInitialized(); //Nice to check for issues before first request 

    appBuilder.UseWebApi(config); 
} 
+0

इससे मुझे मेरी प्रणाली को काम करने में मदद मिली। उल्लेख करने की एक बात यह उपयोगी हो सकती है: सुनिश्चित करें कि आपने ऐपबिल्डर। यूसेवेबएपी कॉल ऐपबिल्डर.मैप कॉल के बाद रखा है। यह मेरे लिए दूसरी तरफ सही काम नहीं करता था। – Gerfboy

संबंधित मुद्दे