|
Hello,
I search for a fast possibility to send data from a server to the client. It should be possible to send the data from one PC to the other. For some other functions the server implements at the moment a remote interface with RegisterWellKnownServiceType...
What is the best possibity to send data (in worst case it could be about 1Mb/s) to the client?
Best regards
Hansjörg
|
|
|
|
|
another thing that I have forgotten...the data is allways a instance of the same class
Thanks
Hansjörg
|
|
|
|
|
Seems you are using Remoting and in .NET remoting you can send streams from server side to client with requesting it from the client area
I used it for sending none shared files from the server to client and the speed was far more 1MByte/Sec (but this method is not such a secure one for file sharing!)
and ofcourse with sending streams you can send all types of data (so you can send your instances as Data with serializing them on the fly in memory stream and then send the stream to client)
I can't give you a complete code because it was part of a bigger project and I must send you lots of code to work
but here is the code I wrote for testing it is possible to do this or not
sorry the code is somewhat messy (it was for testing puposes only)
the share part
namespace NetTest
{
public class RemoteFileBrowser:MarshalByRefObject
{
public delegate void EventFireHandler();
public event EventFireHandler eventFiredFromRemoteObject;
public RemoteResult GetStream(string path)
{
if (!File.Exists(path)) return new RemoteResult();
return new RemoteResult(new FileStream(path, FileMode.Open));
}
public RemoteResult Failed()
{
return new RemoteResult();
}
public string GetMachineName()
{
return Environment.MachineName;
}
public string GetAuthor()
{
if (this.eventFiredFromRemoteObject != null) this.eventFiredFromRemoteObject();
return "Hessam Jalali";
}
}
}
the server side
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Host Started");
TcpChannel tc = new TcpChannel(50000);
ChannelServices.RegisterChannel(tc,false);
RemoteFileBrowser rfb = new RemoteFileBrowser();
rfb.eventFiredFromRemoteObject += new RemoteFileBrowser.EventFireHandler(rfb_eventFiredFromRemoteObject);
RemotingConfiguration.RegisterWellKnownServiceType(rfb.GetType(), "rfb.rem", WellKnownObjectMode.Singleton);
Console.WriteLine();
Console.WriteLine("Press any key to Exit...");
Console.ReadKey();
ChannelServices.UnregisterChannel(tc);
}
static void rfb_eventFiredFromRemoteObject()
{
Console.WriteLine("Event Fired inside");
}
}
and the client side
namespace NetTestClient
{
static class Program
{
static void Main()
{
Console.WriteLine("Enter Address");
string uri=Console.ReadLine();
#region Remote File Stream
RemoteFileBrowser remoteRfb = RemotingServices.Connect(typeof(RemoteFileBrowser), uri) as RemoteFileBrowser;
(remoteRfb_eventFiredFromRemoteObject);
Console.WriteLine(remoteRfb.GetAuthor());
Console.WriteLine("Remote Machine is " + remoteRfb.GetMachineName());
RemoteResult remoteRes = remoteRfb.GetStream(@"N:\Tools for Linux.iso");
RemoteResult remoteFailed = remoteRfb.Failed();
Console.WriteLine();
Console.WriteLine(remoteRes.Message + " Continue...");
Console.ReadKey();
if (remoteRes.Succeed)
using (StreamReader br = new StreamReader(remoteRes.File))
{
Console.WriteLine();
Console.WriteLine("Dumping File");
Console.WriteLine();
while (!br.EndOfStream)
Console.WriteLine(br.ReadLine());
}
remoteRes = null;
#endregion
Console.ReadKey();
}
}
}
hope the post would be useful
|
|
|
|
|
I'm not sure at the moment if this works.
The main purpose of this application is to send the log data to other connected clients. For that I don't wan't to poll allways the server..
but maybe that there is possibility to use the stream! do you know if it is possible to deserialize objectes allways from the same stream?
Best regards and many thanks
|
|
|
|
|
hansipet wrote: do you know if it is possible to deserialize objectes allways from the same stream?
If you mean one stream for all
Yes it is possible but you must set the pointers of the stream manually eachtime by yourself for preventing errors.and ofcourse you need some implementation for preventing asynchronous calls from clients for requesting the stream and update requests from the server on the that.
and if you mean same stream as serialized in request
the answer is yes again and this time you just need to set the pointers to first of the stream with using methods like seek
hansipet wrote: I don't wan't to poll allways the server
if you said that because of the singleton it can be singleCall so after calling and disposing the stream the resources from server side will release and there would be no problem.
but if your Log files are not so huge I think creating a class as LogDataHolder and mark it as serializible then return it as value to clients would be a better idea.
good luck
|
|
|
|
|
how to enable visual style in C# applications. it is enable at design time, but at run time, i see forms as classic design.
|
|
|
|
|
If you mean the look of Windows XP, then you need to have the Windows XP theme enable on your PC. If you have switched to the classic Windows theme, you won't be able to get the XP look in your applications I think.
Talal
-- If this is a post that has been helpful to you, please vote for it. Thank you!
"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."
--Rich Cook
|
|
|
|
|
already enabled, u guess "i said i see v. style at design time"
|
|
|
|
|
You said: "it is enable at design time, but at run time, i see forms as classic design. "
I thought you meant that you enabled it using code but that you weren't seeing the expected result on runtime. You said nothing about SEEING it.
-- If this is a post that has been helpful to you, please vote for it. Thank you!
"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."
--Rich Cook
|
|
|
|
|
You may also try adding the code
Application.EnableVisualStyles(); in the Form_Load event.
Thank you
Laddie
|
|
|
|
|
The method will not work if it is not the first line in the void main() method of the application. The method is an application based not form based method.
void main()
{
Application.EnableVisualStyles();
Application.DoEvents();
Application.Run(new Form());
}
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[ ^]
|
|
|
|
|
Hi
well I want to suggest to u fine ppl to write this at the top of these forums... PLZ LURK BEFORE YOU LEAP!!
People are often asking basic type of questions that are there in the articles and here in the forums as well
Thanks
Rocky
You can't climb up a ladder with your hands in your pockets.
|
|
|
|
|
|
|
Gee we never thought of that!
|
|
|
|
|
Hi again,
Now I have been told I have to finish this by Monday. What a boss ha.
They told me to not worry about sql innjection attacks at the moment because thats not what they are judging me on. This is what I am trying to do
string sql = "select * from employees where employeeID= '" + empNamecomboBox.SelectedValue.ToString() + "'";
string sql = "select * from employees where employeeID= '" + empNamecomboBox.SelectedValue.ToString() + "' select * from Role where RoleID = '" + rolecomboBox.SelectedValue.ToString() + "')";
the employees part searches, but when I na from the employee drop down and want to search on role, this statment brings up nothing for role.
Do I need to do an or or something similar? The one with the smiley face works, its just when I try to add the other drop down list queries it doesn't.
|
|
|
|
|
Hello,
falles01 wrote: hey told me to not worry about sql innjection attacks at the moment because thats not what they are judging me on.
Ok, but you really should read what Colin suggested 7hr ago:
http://www.codeproject.com/script/comments/forums.asp?msg=2196907&forumid=1649#xx2196907xx[^]
There you would find this nice example (uses 'AND'):
int uid = this.GetUserID();
string friendlyName = this.GetFriendlyName();
string sql = string.Format("SELECT Criteria FROM Favourites "+
"WHERE UserID={0} AND FriendlyName='{1}'",
uid, friendlyName);
SqlCommand cmd = new SqlCommand(sql, this.Connection);
string criteria = cmd.ExecuteScalar();
sql = string.Format("SELECT * FROM Products WHERE ProductName = '{0}'",
criteria);
SqlDataAdapter da = new SqlDataAdapter(sql, this.Connection);
da.Fill(this.productDataSet);
All the best,
Martin
|
|
|
|
|
oh can I use seperate statements?
Life for instance
string sql =
and then
sql =
do i have to use string.format? after sql = ?
Thanks
|
|
|
|
|
Excellent it works using
sql =
Thank you very much
|
|
|
|
|
Hello,
I'm glad I could help you help yourself.
All the best,
Martin
|
|
|
|
|
falles01 wrote: string sql = "select * from employees where employeeID= '" + empNamecomboBox.SelectedValue.ToString() + "' select * from Role where RoleID = '" + rolecomboBox.SelectedValue.ToString() + "')";
try an put a MessageBox.Show(sql); after you make this string and see whats being made. I think there is this extra ) at the end or this SQL Query is incomplete. I Can't understand why u'r having 2 selects in one SQL Statement.
Rocky
You can't climb up a ladder with your hands in your pockets.
|
|
|
|
|
This is two statements. Try running them seperately. Also, you're still passing Ids as strings, I assume this means they are strings in the DB, which is not efficient at all.
Christian Graus - Microsoft MVP - C++
"I am working on a project that will convert a FORTRAN code to corresponding C++ code.I am not aware of FORTRAN syntax" ( spotted in the C++/CLI forum )
|
|
|
|
|
Yes you are right. I thought the following worked because I was testing them one by one, but if I want to search on the employee (being the first statement), then I can't. I can only search on division. I am guessing I need to put it in one statement. Could you show me with the correct notation how to do that? Also I was informed of the string sql from somewhere, but what do you suggest in place of that?
string sql = "select * from employees where employeeID= '" + empNamecomboBox.SelectedValue.ToString() + "' or managerID = '" + managercomboBox.SelectedValue.ToString() + "' or DivisionID = '" + divisioncomboBox.SelectedValue.ToString() + "' or RoleID = '" + rolecomboBox.SelectedValue.ToString() + "'";
sql = "select * from Role where RoleID= '" + rolecomboBox.SelectedValue.ToString() + "'";
sql = "select * from Manager where ManagerID= '" + managercomboBox.SelectedValue.ToString() + "'";
sql = "select * from Division where DivisionID= '" + divisioncomboBox.SelectedValue.ToString() + "'";
|
|
|
|
|
You were right these people are not good to work for.
I am going to leave and go back to my old job. I don't need to be this stressed.
|
|
|
|
|
I use datasets to connect to access 2003 mdb file, created an insert query to write to ole object field in one of my tables,when i want to write data which is a text file bytes, with size of more than 1 mb, only the first "1 kb" of the data is written to the field, when i get back the data from access file, i get truncated file with size of 1 kb. Why i cant write more than 1 kb to a ole object field??? i read from the help of access 2003 that the field holds up to 1gigabyte of data but i can write only 1 kb, i checked out the variables, traced parameters but i couldnt find my mistake mistake, i think there is a problem with Access.
Thank you for your concern.
---
TSTfile = File.ReadAllBytes(@OpenTSTFileDialog.FileName);
TSTfileBytes = new Byte[TSTfile.Length];
TSTfile.Read(TSTfileBytes, 0, TSTfileBytes.Length);
TSTfile.Close();
----
later i use
---
myGrupTablosuTableAdapter.grupTablosuInsertQuery(GroupNo,TSTfileBytes);
|
|
|
|