iT邦幫忙

0

c# webapi 在Global.asax設定了物件,能在webapi被呼叫時使用嗎

  • 分享至 

  • xImage

因為要做一個網站
能讓外部使用者呼叫api傳送訊息到Server後,根據內容,再使用websocket的方式,轉傳給對應的服務人員,目前我是在websocket這一部份沒有問題,但現在碰到的問題是api收到內容後,不知道怎麼使用已存在的websocket物件中的session送出訊息。
下面是我目前的程式碼

Global.asax
public class WebApiApplication : System.Web.HttpApplication
    {
        public  ChatWebSocket chatWebsocket;   
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            //啟動websocket
            chatWebsocket = new ChatWebSocket();
            chatWebsocket.Start();            
        }
    }
GetLine200Controller.cs
//接收Line訊息轉接
public class GetLine200Controller : ApiController
{
   
    [HttpPost]
    public IHttpActionResult POST()
    {            
        DateTime now = DateTime.Now;
        //收到的訊息
        string postData = Request.Content.ReadAsStringAsync().Result;
        //透過chatwebsocket傳送到client端
        return Ok();
    }
    


}
johncoc iT邦新手 3 級 ‧ 2022-10-31 11:00:16 檢舉
參考這篇看看
https://stackoverflow.com/questions/24890813/get-access-to-a-global-asax-property
as0500 iT邦新手 4 級 ‧ 2022-10-31 12:42:41 檢舉
因為我要在網站啟動後,就啟用websocket監聽一個port,讓client端連上後記錄,api收到的訊息,再根據內容,轉傳到client去。
但因為api的連結都是獨立的,所以不符合我想要使用的情境。
as0500 iT邦新手 4 級 ‧ 2022-10-31 12:45:56 檢舉
自問自答一下,我現在的解法是在 Global.asax用Application.Add("cwebsocket", chatWebsocket);記錄物件,然後在api呼叫時用var cw = (ChatWebSocket)Application["cwebsocket"];取得已存在的物件來使用。
現在是可以處理我的需求。
但不知道是不是有什麼更適合的方法。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
科科
iT邦好手 8 級 ‧ 2022-10-31 13:45:35

寫成靜態物件試試

我要發表回答

立即登入回答