|
I have an windows service that sends a message via remoting to a gui app on the same machine, which works great.
Now I need to send an unrelated message back from the GUI to the service i.e. two way messaging. I tried to create another remoting channel on a seperate port, however this does not work. I feel as though I'm missing the point here as it would seem I can't run a client and server in the same app. How would I go about this?
ChannelServices.RegisterChannel(new TcpChannel(), false);
rmComDataReceived = (ComDataReceived)Activator.GetObject(
typeof(ComDataReceived), "tcp://localhost:50050/ComDataReceived");
ChannelServices.RegisterChannel(new TcpServerChannel(50051), false);
rmSendPagingMsg = new SendPagingMessage();
ObjRef refSendPagingMessage = RemotingServices.Marshal(rmSendPagingMsg, "SendPagingMessage");
rmSendPagingMsg.SendPagingMessageEvent += new SendPagingMessage.SendPagingMessageEventHandler(Service_SendPagingMessageEvent);
The code above produces the error message: The channel 'tcp' is already registered
|
|
|
|
|
Hi!
You'll have to use a different constructor at least for your second channel.
With the constructor you use TcpServerChannel(int port) ) the server channel also gets the name "tcp", already taken by your first tcp channel. That's the reason for the error message you get.
Try this instead:
ChannelServices.RegisterChannel(new TcpServerChannel("guiChannel", 50051, null), false);
Regards,
mav
--
Black holes are the places where God divided by 0...
|
|
|
|
|
At the button click event, it displays records, but the problem here is that instead of showing all the 30,000 records, its displaying only the first row of record and that too upto the no. of total records which is close to 30,000 ( i.e First row of record is being repeated 30,000 times ).
I tried using loops, but it hangs somewhere.........i'm wrong somewhere........i need help........the code is shown below........
myTable.rows.count ]fecthes the correct 30,000 records count
OleDbConnection myCon = new OleDbConnection();
OleDbDataAdapter myAdp = new OleDbDataAdapter();
DataViewManager myDvMngr = new DataViewManager();
DataSet myDS = new DataSet();
DataTable myTable = new DataTable();
string report_file = "<path of="" report="">";
ReportDocument ReportDoc = new ReportDocument(); </path>
private void btnReport_Click(object sender, System.EventArgs e)
{
makeReport(report_file);
{
SetParamValue("@parameter1", myTable.Rows[recordCount]["CLNT#"].ToString());
SetParamValue("@parameter2", myTable.Rows[recordCount]["CNAME"].ToString());
SetParamValue("@parameter3", myTable.Rows[recordCount]["CSEX"].ToString());
SetParamValue("@parameter4", myTable.Rows[recordCount]["CSS#"].ToString());
}
crystalReportViewer1.ReportSource = ReportDoc;
}
|
|
|
|
|
You seem to be missing the loop, but you may want to try something like:
foreach (DataRow row in myTable.Rows)
{
SetParamValue("@...", row["CLNT#"].ToString();
... and so on.
}
|
|
|
|
|
Is anyone out there to help me out...........i tried using the DataRow as well, i'm getting weird results:
1. The first record is repeated 30,000 times and the report shows no other records.
2. After some code changes, the Crytal Reports again shows one record for 30,000 times and then the Crystal Reports screeb blinks and it displays the second record and displays it 30,000 times and so on until I close the program........
Please help me friends.........
|
|
|
|
|
thanks for the reply........i'm already using the SetParamValue() as shown below:
private void makeReport(string ReportFile)
{
ReportDoc.Load(ReportFile);
}
private void SetParamValue (string paramName, string paramValue)
{
for(int i=0; i < ReportDoc.DataDefinition.FormulaFields.Count; i ++ )
{
if(ReportDoc.DataDefinition.FormulaFields[i].FormulaName=="{" + paramName + "}")
{
ReportDoc.DataDefinition.FormulaFields[i].Text = "\"" +paramValue +"\"";
}
}
}
|
|
|
|
|
In C++, There is a delete command. But i simular in C#. I am creating program that will have huge ammount of temporary data in memory. I want to get rid of it, without closing process and GC to clean it up. I am also importing WinAPI calls.
|
|
|
|
|
In C# you need to call the Dispose method if you want to manually delete items. GC does some cleaning, but at times even with the combination of the two methods, .NET applications do hog some memory. Another way to minimalize the memory used is to only import libraries that you will be using for that particular class.
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios
Discounted or Free Software for Students:
DreamSpark - downloads.channel8.msdn.com
MSDN Academic Alliance - www.msdnaa.com
|
|
|
|
|
When objects go out of scope, they automatically become subject to garbage collection. You can request a garbage collection to occur but how and when it runs is up to the CLR.
Do some careful research on System.GC.Collect() , System.GC.RunFinalizers() , and possibly System.GC.WaitForPendingFinalizers() .
I've never tried doing this myself but, from what I understand it's generally not a good idea to tinker with garbage collection. GC is an extremely intelligent and streamlined process and futzing around with it usually causes more harm than good.
|
|
|
|
|
Robert.C.Cartaino wrote: When objects go out of scope, they automatically become subject to garbage collection.
They actually become eligible for garbage collection, but won't be collected until the runtime determines there is a need to run a collection cycle.
Robert.C.Cartaino wrote: I've never tried doing this myself but, from what I understand it's generally not a good idea to tinker with garbage collection. GC is an extremely intelligent and streamlined process and futzing around with it usually causes more harm than good.
Yes, you generally should never need to call any of the GC functions. Each time a collection cycle runs, your applications main thread is frozen. The more often you call GC.Collect, the more time your application will spend frozen.
Scott Dorman Microsoft® MVP - Visual C# | MCPD
President - Tampa Bay IASA
[ Blog][ Articles][ Forum Guidelines] Hey, hey, hey. Don't be mean. We don't have to be mean because, remember, no matter where you go, there you are. - Buckaroo Banzai
|
|
|
|
|
CLR does the garbage collection automatically so you don't need to delete the objects manually. CLR invokes garbage collector when there is need for memory.
Saksida Bojan wrote: I am also importing WinAPI calls.
If you have P-Invoke calls, you should make sure that it gets removed manually once you finish using it. .NET provides an interface "IDisposable" which can be implemented on your classes and can be used for deterministic clean up. Scott has an excellent article here[^]. Take a look at that.
|
|
|
|
|
hi,
my question is that...how can i determine that what mouse event is occur on particular button?
|
|
|
|
|
By subscribing to the various mouse events possibly?
Dave
|
|
|
|
|
i just want get the mouse event's name which occur on particular button.
|
|
|
|
|
If your using a event that uses the MouseEventHandler, which passes MouseEventArgs, your able to use the MouseEventArgs to find which button was pressed.
For example:
public Form1()
{
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
}
void Form1_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Middle)
...
}
Use the intellisense to show all of the available MouseButtons to choose from.
|
|
|
|
|
I'm pretty sure Click won't tell you. But you can handle the Up and Down events to detect your own clicks.
private void button1_MouseDown ( object sender , System.Windows.Forms.MouseEventArgs e )
{
switch ( e.Button )
{
case System.Windows.Forms.MouseButtons.Left : ...
}
}
A while back I was writing a class to help me with it, but it's not yet ready for prime time.
|
|
|
|
|
I'm trying to verify if a character is a letter.
Regex.IsMatch("3", "[a-zA-z]") returns TRUE when it should be FALSE.
What am I doing wrong?
thanx
|
|
|
|
|
why not just use the char.IsLetter(char c) function?
|
|
|
|
|
Apart from what Jimmanuel said, your code returns FALSE for me.
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
>>> Regex.IsMatch("3", "[a-zA-z]")
false
Works for me. There must be something else wrong with your code.
|
|
|
|
|
Ok, the following code worked for me. I created a Windows Form with a textbox control and a button. Check it out:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (Regex.IsMatch(textBox1.Text, @"[a-zA-z]") == false)
{
MessageBox.Show("false - input is numeric.");
}
else
{
MessageBox.Show("true - input is non-numeric.");
}
}
}
}
hope this helps.
Jay.
foreach( inch on Jason )
{
Girlfriend.IsHappier();
}
|
|
|
|
|
Hi all. I have build a application in C#. I want to create the next cenario. I want to install the application in all the users and in the same time have in the server a "activity monitor" that tells me who is logged in and what's the state of the application. Could some one give me a pointer or two? Help me to find the way of illumination LOL. Thanks every one.
|
|
|
|
|
There is no easy way, you'll have to write the necessary code at the appropriate places and record the info in a database table.
It shouldn't be difficult but may be time consuming.
Bob
Ashfield Consultants Ltd
|
|
|
|
|
Heloo,
How can i read a specific txt file and open a new 'mdb' file that will contain some things that the file has.
For instance,
The File contains:
00000 33333 22222 11111
ID=32 Name=Fox DATE=040208
33333 33333 33333 33333
Number=45 Add=LA Cell=12345678
22222 11111 22222 11111
ID=12 Name=LOLA DATE=020207
and so on....
i want to create a new mdb file that will contain a specific columns (ID,NAME,DATE,NUMBER,ADD,CELL)..
i want that the comp will read the file and ignore the numbers(on the first line,on the third line and on the fifth line) and the comp will add a new line for the mdb file(for example: gil.mdb)
it will very help me..
it is for my HUGE project..
thank you very much..
|
|
|
|
|
System.IO.StreamReader sr = new System.IO.StreamReader("c:\\1.txt");
String Line = sr.ReadLine();
And Look for String.Split to split string to array based on entry. And using String.Substring to get specific chars of specific lenght.
You need to manualy create parser to intercept and convert it to your DB writer
|
|
|
|