Невозможно развернуть и использовать программу C # с поддержкой WebORB - PullRequest
1 голос
/ 17 сентября 2010

Я пытался развернуть приложение WebORB .NET C # ASP.NET (C # .NET), но не могу заставить его работать.Он будет работать успешно, но ничего не делает, и у меня возникает ощущение, что я делаю какую-то глупую ошибку.У меня есть клиент Flex, который должен читать данные, поступающие с сервера WebORB, и консоль WebORB показывает, что клиент Flex подключен, так что с частью все в порядке.Приложение сервера C # .net - это то, что не работает.

Я разместил ниже код приложения сервера C # .asp, так как считаю, что клиент работает нормально.Это приложение должно фиксировать использование ЦП компьютера, на котором оно запущено, и отправить его на сервер WEBORB, чтобы разрешить доступ клиенту Flex.Код взят из примера, представленного на веб-сайте WebORB.

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="aspNetCCPU._Default" %>

<%
    // Load a new instance of the class
    aspNetCCPU.Class1 jiifjio = new aspNetCCPU.Class1();
    Response.Write("Class loaded");

     %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>

Class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Diagnostics;
using System.Timers;
using Weborb.Util; 

using Weborb.Messaging.Api.Service;
using Weborb.Messaging.Api;
using Weborb.Messaging.Server.Adapter;

namespace aspNetCCPU
{
    public class Class1 : ApplicationAdapter
    {
        private Timer cpuReadingTimer;
        private PerformanceCounter cpuCounter;

        // invoked when WebORB for .NET starts up
        public override bool appStart(IScope app)
        {
            bool appStarted = base.appStart(app);

            // if application could not start for any reason, do not proceed further
            if (!appStarted)
                return appStarted;

            // initialize performance counter
            cpuCounter = new PerformanceCounter();
            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName = "% Processor Time";
            cpuCounter.InstanceName = "_Total";

            // start thread to get CPU readings
            cpuReadingTimer = new Timer(1000);
            cpuReadingTimer.Elapsed += new ElapsedEventHandler(cpuReadingTimer_Elapsed);
            return appStarted;
        }

        void cpuReadingTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            // ignore timer event, if there are no connected clients to the scope
            if (scope.getClients().Count == 0)
                return;

            // get the CPU reading
            float cpuUtilization = cpuCounter.NextValue();

            // create an array of values to deliver to the client.
            // there is only one value, but the API requires it to be an array
            object[] args = new object[] { cpuUtilization };

            // get an enumeration of connections to this application
            IEnumerator<IConnection> connections = scope.getConnections();

            while (connections.MoveNext())
            {
                IConnection connection = connections.Current;

                // invoke client-side function to deliver CPU reading
                if (connection is IServiceCapableConnection)
                    ((IServiceCapableConnection)connection).invoke("processCPUReading", args);
            }
        }
    }
}

1 Ответ

1 голос
/ 28 октября 2010

Джоэл -

Ошибка : забывается, что по умолчанию создается новый экземпляр класса обслуживания (WebORB) каждый раз, когда вызывается любой из его методов.

Исправление : Украшение класса обслуживания атрибутом [ApplicationActivation ()], чтобы один и тот же экземпляр класса обслуживания использовался на протяжении всего жизненного цикла вызывающего приложения.

Подробнее, включая пример кода, см. http://blog.themidnightcoders.com/index.php/2010/10/28/server-side-cpu-usage-in-weborb.

Надеюсь, это поможет!: -)

Джим Пламондон, специалист по технологиям The Midnight Coders (создатели WebORB)

PS: Я прошу прощения за медлительность моего ответа;Я впервые нашел ваш вопрос сегодня.

...