|
I have tried both methods, returning a file stream vs. filling a big byte[] buffer and I found that the byte[] buffer was much faster which suprised me. I too was worried about the inefficiency of using large chunks of ram but I guess it just depends on the amount of RAM on your server, the average file size and the number of requests served. You could also compress the file data before you put it in the byte[] buffer, saving memory and speeding transfer times.
Joel
|
|
|
|
|
When you used the buffer method, did you use a singlecall or singleton object? Cause I'm using a singlecall object, and everytime I call the function to send the next buffer, the stream object (that is global in the remoted object) has been erased. On top of that, I can't find a method to have the filestream start at byte X without going back through the file again. Any advice or code snipets you could offer?
Thanks for the info,
Steve
|
|
|
|
|
I'm not sure I understand how you are doing the transfer. Basically I tried two methods.
The file stream approach works like this. You will have a remote method like GetFile() which returns a file stream object. The client calls GetFile(). The server creates a new file stream object by opening the desired file on the server machine. The server returns this file stream object to the client. The client is then free to call the Read() on the file stream object and when done Close(). Using this method it does not matter what kind of remote object (Singleton etc.) But this method seems to be kind of slow even when you minimize the number of read calls by making your read buffer large.
The other method I use is to have a remote method GetFile() that returns a byte[]. The client calls GetFile() and the server opens the desired file reads the entire file into the byte[] and returns this to the client. The client is then able to write the entire byte[] to it's local disk. This seems to work very well for me (tested up to 13MB file).
Hope this helps - Joel
|
|
|
|
|
That makes sense. I was trying to send only 4k at a time, so I was having all sorts of problems with getting the server to send the next 4k rather than the first 4k. But I realize that I'm never actually going to be sending a file too big to fit into a byte array. I'll just send it in one big array like you did.
Thanks for the help,
Steve
|
|
|
|
|
Been using C# for a while now, but just never had to interact with a database (actually a running joke in the office... only dealt with web services, XML, sockets, and file IO). Anyway, I'm having a bit of a problem finding a solution to my challenge (two of them).
Quick Overview:
My application uses Access as a database (desktop app). On demand, I pull data from the Access database into a Dataset, using it as a working copy of the database. At anytime the user can save/reject his changes.
Challenge 1:
I am populating a combobox with values from one of my datatables. The value being added to the control is the "name" (not unique) of the record, but I have a unique ID for each record (int). When the user selects an option in the combobox, I want to be able to get the ID of the record the user selected. Currently, as I add items to the combobox, I add the ID's to an array where the combobox.selectedindex = index of the array. Makes it tough when they add a value to the combobox (I have to add it to the datatable, then flush and update the array and combobox so everything is synch'd. There MUST be a better way This is my work around... just wanted to get it working and then go back and do it the right way.
Challenge 2:
Once my data is in the dataset, I need to be able to query it. The "datatable.contains" method helps, but what do I do when I need to find a specific record? I was looking for something that would do the following: DataRows theRecords = datatable.filter("intRecID=1"); However, I can't find a ".filter" or compareable item.
Any ideas on how to overcome these two challenges? Just about run all leads & ideas down...
Andrew Connell
IM on MSN
andrew@aconnell.com
|
|
|
|
|
Challenge 1: This is pretty easy to do. Say you have a DataSet with a DataTable named "Table 1" in "Table 1" you have Columns "id" and "name". You want "name" to be what the users see and "id" to be returned.
comboBox1.DataSource = DataSet1.Tables["Table 1"];
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";
Then to get the associated id from the user's selection (I'm assuming ID is an AutoIncrimenting Integer)
id = (int)comboBox1.Value;
Challenge 2: You're close, very close. DataTable does not impliment a filter but DataView Does. And you can easily get a DataView from a DataTable by using the DefaultView Property thus:
DataSet1.Tables["Table 1"].DefaultView.RowFilter = "intRecID=1";
See
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataDataViewClassRowFilterTopic.asp?frame=true for more info.
|
|
|
|
|
Fantastic! you hit the nail on the head. Only thing I had to change from your code above was the .Value property doesn't exist so I replaced it with .SelectedValue .
Thanks Chris!
-AC
Andrew Connell
IM on MSN
andrew@aconnell.com
|
|
|
|
|
Oops, got me there. Even in the .NET framework they can't keep these properties too consistent
|
|
|
|
|
I just started studying the .NET Remoting Architecture.
In the samples, you import or reference several system namespaces:
// C#
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
The last line gives a compile error saying the Tcp namespace does not exist.
The doc for the TcpChannels class says it exists within this namespace.
The intellisense will not show it either.
Is there something that I need to install or enable to be able to see this class?
Just wondering...
|
|
|
|
|
Solution was to add System.Runtime.Remoting.dll as a project reference - Duh.
|
|
|
|
|
I am trying to use the Internet Explorer control in my C# project. I imported the control into the toolbar and dropped it onto my form. This, of coarse, imported SHDocVw.dll.
Now, I can navigate around with the control just fine, but I wanted to do something a bit more tricky. I have HTML resources embedded in my project and I want to display them using the DOM in the IE control. So, next, I went searching for the Document property. To my surprise, it was typed as Object. After a bit more research, I realized that the DOM was in a separate dll. MSHTML.DLL to be exact. I imported this only to find another problem.
VS.Net imported the all of the interfaces and classes. The one of interest is the HTMLDocumentClass class, which implements the IHTMLDocument2 interface. This interface has the writeln that I want to use. The problem is that VS.Net imported the method as:
writeln(params object[] psarray)
But the original C++ version is actually
HRESULT writeln(SAFEARRAY* psarray)
and the documentation states that psarray is actually a BSTR[]. When I try to pass a string or string[], the framework doesn't catch that it needs to convert it and Explorer just throws an exception.
Since this is method isn't imported using DllImport or anything, how can I make VS import this method to take a string instead?
Jared Bienz
jbienz@hotmail.com
|
|
|
|
|
Hey there everyone, does anyone happen to know where I can find the ASCII code for the left, right, up, down arrows and the spacebar?
|
|
|
|
|
If you handle the KeyDown event you can catch them, and you can use the values in the System.Windows.Forms.Keys enumeration to find them.
Left, right, up, down dont have ASCII codes per se, and the spacebar is 32.
|
|
|
|
|
The .NET SDK changes MSO.dll in some way. Now one of my add-ins isnt working. Will re-installing office affect the SDK?
Wake up CPians.....
Follow the Green Alien....
"Bob, a real Alien in a virtual world"
Get your free CP wallpaper here or [Paul]
|
|
|
|
|
I Create an html page with vs .net, and i add vbscript and javascripts to it. Now how do i set breakpoints to debug it? Attacing to IE and chosing to debug scripts does not work. How is it done?
Thanks
|
|
|
|
|
Everyone:
I've been doing web programming for about two years now, concentrating entirely on Microsoft technologies (ASP, SQL, Access...). Now that .Net has arrived I am really looking for some guidance in which direction to take in order to become quite competent in these new technologies. While the obvious choice is probably ASP.Net, someone suggested that I start with VB.Net instead (since in essense ASP is stripped from VB). I've unfortunately avoided VB up until now, but would really like to learn it starting with .Net. What do you guys think? Should I start with VB.Net or ASP.Net(or other)? Can you recommend any great books/tutorials? Thanks alot in advance.
Shawn
|
|
|
|
|
If you haven't learned VB before I'd say don't bother with VB.NET and learn C# instead
SABmore wrote:
(since in essense ASP is stripped from VB)
ASP is a script processor that provides a consistant object model; it just so happens that most ASP sites are written with VBScript.
There is a distinction there; if you want you could use JScript or ActivePerlScript, plus others.
Now on to ASP.NET; I found Beginning ASP.NET Using C# from Wrox to be a good introductory book to ASP.NET and C#; some of the stuff you'll probably just need to skim because it assumes you have no prior web programming knowledge. Otherwise I found it to be a decent book.
HTH,
James
|
|
|
|
|
Can I create WebServices in .NET installed on an XP Home edition machine? IIS does not come with XP Home.
Also, I do have an XP Pro cd available, do you know if I can install IIS from XP Pro CD onto XP Home?
Thanks
Jason Henderson quasi-homepage articles "Like it or not, I'm right!"
|
|
|
|
|
Well I think you answered both of your questions yourself. Just give it a try. Try to install IIS from the pro cd if it doesn work then youll need to install the pro edition onto your computer. I dont know why you wouldnt want to do that anyways.
|
|
|
|
|
I can't install IIS on Home, but can I still create web services?
I can't afford the upgrade right now. The Pro cd is from work and I thought that I might be able to install IIS from it.
Jason Henderson quasi-homepage articles "Like it or not, I'm right!"
|
|
|
|
|
Too answer the first question. No you cant create web service without IIS installed. Now I am not telling to do anything but I know of a many people who have freely downloaded XP Pro using kazaa
|
|
|
|
|
Hi,
I created a UserControl using Vb.Net(Custom Control Library)
I want to Associate an Icon to my UserControl.
I tried using the <toolboxbitmap> Attribute.
It works ...but it has dependency on the physical bitmap file.
I want the bitmap to be something like the Resource
for the Control.
Please some one help me on how to do this in .Net....
Thanks,
Firoz
|
|
|
|
|
Add the bitmap to your project as an embedded resource.
Ensure that the filename matches the name of your control minus the default namespace. (If the default namespace is "MyControls" and the full control name is "MyControls.Library.FooBar" the bitmap needs to be named "Library.FooBar.bmp".
Apply the ToolboxBitmap attribute passing in the type for the control, in C# this is typeof(FooBar) not sure what the equivalent in VB.NET is.
HTH,
James
|
|
|
|
|
thanks James,
It worked...in VB.Net also
The equivalent for typeof() is GetType() in VB.Net.
Thanks
Firoz
|
|
|
|
|
Hi everyone!
I'm trying to add some description to my classes' function that should appear next to IntelliSense list or inside the Quick Info box.
Thanks!
MP
Maciej Pirog
|
|
|
|