I have web service application which have two session which have two method,which Sessionenable property is enable in both. In second one I check if the session is not null and I do something after it. When I test my application in the test page of web servise it runs OK but when I test it in a ASP.NET client application it is obvious that the Session is null and my connditions does not work in second web service. Any idea?
You must use a cookie container with each request. Sessions rely on storing a SessionId in a cookie. Without cookies enabled (or in this case, a container in which to store them), sessions won't work. Use the CookieContainer property in the Web Service class for your clients, inheritted from HttpWebClientProtocol). It uses a System.Net.CookieContainer. Instantiating a new one and assigning the property should do the trick. Just make sure you reuse the CookieContainer. So long as the Web Service class remains instantiated, you shouldn't have to do anything else.
Hi Heath,Thanks for your reply.I found it but I didn't want to mess up forum. One of my client will be VB.6 . Do you know ,does VB6 has this capability to set cookie container? I think there is no problem with that but I want to be sure.
Not sure about that. It depends on how VB6 encapsulates the Web service, which I'm not familiar with. I'm sure this is not a new problem, so you could always try googling for an answer. I'd check what the class that's generated from the SOAP SDK (or whatever you're using to generate the VB6 class) supports, too. If you would be so kind, could you reply to what you found? I'd be interested to know, too.
I test a VB.6 client. I didn't know that vb.6 use XML Web Service like this. It doesn't create web service class or so,it just create a MSXML2.DomDocument and send an url which contain web service method name and get a XMLMessage. Do not need to set any cookie container or something else, Sessions works without any additional things for VB.6.Just send a url request and you will receive correct data.
Is there a way to read the properties of a file on a http server?
I want to know when a specific file was modified, so I can make C# download it by itself when the local version is older than the one on the web.
Using the right properties on the Form class, you can implement the container/view part pretty easily. As for the doc/view part, there was a really good series of articles on MSDN[^] recently. See the following parts by Chris Sells about document-centric applications in Windows Forms using C#:
I've tried to display a MetaFile (saved as Image in a DB) in a pictureBox, using the Graphics.DrawImage(image, pictureBox.Bounds, img.getBounds(ref GraphicsUnit.Pixel), GraphicsUnit.Pixel) method.
The pictureBox Bounds are sizeable, so in step 1, the image is stretched smaller and everything's fine.
But in stept 2, the picturebox gets larger than the image and the method does not stretch the image.
Is there a possibility to resize the whole metafile?
I've tried it with a new Metafile on a System.IO.MemoryStream, but that doesn't work, even a new transformation of the e.Graphics surface didn't work by using e.Graphics.ScaleTransform().
Which does exactly what it says on the tin, but its not exactly what I am looking for as I dont want/need async/waitcallback threads. Basically I have an application that will start X mount of threads (X is dicatated by a config file) and these will continue to run until the application is shut down.
Async methods are a good way to start new threads and you don't have to worry about implementing in the callback - just use an empty method.
You could also use a ThreadPool, which uses the QueueUserWorkItem to thread a WaitCallback but that can also take an Object as a state variable that is passed to the WaitCallback - this could be anything from a single object to an array or list of arguments.
If you really don't want to use either of these, you should design a class that takes the parameters you want in the constructor or some properties and then uses an instance method on that class in the ThreadStart delegate. The delegate can then access all the fields in which those arguments are stored, like so:
Does anyone know how I can create and use a hidden window in a windows service application written in C#?
I inherit the form class but and create instance of the new class but its handle is not valid and the form is not created. A prove for this is that I can not find it in the list of available windows using Spy.
I have no problem to use the same code in standard Windows based application. The form is created and works. However it fails in a service application.
First of all, why would you need to display a hidden window in a service, anyway? It would seem to serve no purpose?
If you do need to anyway, check the "Allow service to interact with desktop" option in the Services snap-in if running as the SYSTEM account (Local System), or specify a user with login rights to the local machine. This form would only be available in the context of that user, however.
My C# app talks to a SQL database to get information back. The app is basically a GUI representation of the data in the database. When I modify the data in the client C# app, I would like to not only send the changes back to the database, but also to all other clients connected to the SQL database (all clients will be running this same C# app).
Now, I already have the C# app reading, displaying, and sending the data back to the SQL database. What I need is to do now is to send this modified data to all the other connected clients. My thought is that I will probably need a seperate application to do this, possibly using remoting.
Can some of the experts here tell me if I'm on the right track? Does this seem like a very big undertaking? Is remoting the best way to do this or would you suggest something else such as a webservice or an additional SQL table for holding the modified data?
Any suggestions, words of warning, comments, any feedback whatsoever is welcome and appreciated.
I could, but that's not an ideal situation: the total amount of data is several gigabytes worth. If I only change a single row in the database, why refresh all the data; it'd have to search through several gigs of data just to update a single row. Any other solutions that would be more efficient?
Since your original question didn't mention anything about gigabytes of data being involved maybe you would like clue us in to any more details your holding back. IMO if you have gigabytes of data streaming to client apps you have way to much information. What is your network load when all of these apps start up at once?
Yes, you're right I should've mentioned that. The database itself has gigabytes worth of data, only some of it is shared between multiple clients; a single client won't be loading the entire database's data.
If you use a DataSet to store this information - which will be good to use in a .NET Remoting application because it serializes very nicely - you can use DataSet.GetChanges to return another DataSet with only the rows that changed. Make sure you don't call DataSet.AcceptChanges first, though, otherwise you'll get an empty DataSet.
Currently, I'm storing the information locally in custom collections rather than datasets, but I could make that change quite easily.
So, I could use a dataset for the storage, no problem.
I guess the real question I'm asking is, what's the best way to actually synchronize the data between the clients? The ideal situation I'm looking for is that each client gets notified when data has been changed, and gets notified what that data is. How that is done, I don't know - my initial thought was that I could build a server app that all the clients connect to. Each client would send data modifcations to the server app, then the server app would write that data modification to the database, then notify all connected clients of the modification. What do you think, is this feasible? Is there a simpler way?
As Mazdak mentioned, .NET Remoting is good for this, so long as you host it in a service that allows two-way communication. For instance, if you host it in IIS it is automatically exposed as a Web Server. Because of the one-way nature of HTTP, it can't communicate with the clients. If you use a TcpChannel with a BinaryFormatter, you'll get great performance, too (as well as remote calls go).
Just implement an event on your remoting object. When data is updated via the remoting object, you fire your event. Clients that handle that event will get notified of the changes, which you can pass as event arguments similar to most events (especially for controls) work in the .NET base class library.