|
Thanks Calla,
i think web service is the best solution for this. i will go for it. thank you so much for you all my friends.
|
|
|
|
|
You're welcome
A webservice also gives you the advantage of being able to change your business layer (maybe your database change layout or you switch databases) without having to change anything in any of the clients. So from an architectural point of view this is also a better and more flexible solution.
|
|
|
|
|
I've followed the following tutorial: http://msdn.microsoft.com/en-us/library/system.net.security.negotiatestream%28VS.80%29.aspx[^]
and have implemented a server and client application.
When I use the client to connect to the server on the same machine (i.e. the IP is 127.0.0.1) it makes a secure connection.
When I use the client on my XP machine to connect to the server on my Vista machine then the line:
authStream.EndAuthenticateAsServer(ar);
fails with the exception I pasted into the subject of this post.
What I want to do is allow any client on any machine over the internet or LAN to connect to my server on port 9000 over an encrypted connection.
I would be happy if I could allow the client to specify a username and password - but I don't know how to implement that functionality.
details on the exception:
$exception
- $exception {"The server has rejected the client credentials."} System.Exception {System.Security.Authentication.InvalidCredentialException}
+ [System.Security.Authentication.InvalidCredentialException] {"The server has rejected the client credentials."} System.Security.Authentication.InvalidCredentialException
+ Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
HelpLink null string
+ InnerException {"The logon attempt failed"} System.Exception {System.ComponentModel.Win32Exception}
Message "The server has rejected the client credentials." string
Source "System" string
StackTrace " at System.Net.Security.NegoState.EndProcessAuthentication(IAsyncResult result)\r\n at System.Net.Security.NegotiateStream.EndAuthenticateAsServer(IAsyncResult asyncResult)\r\n at RemoteDiagnostics.Server.class_RDServer.EndAuthenticateCallback(IAsyncResult ar) in C:\\Users\\Nuclear\\Documents\\Visual Studio 2008\\Projects\\RemoteDiagnostics\\RemoteDiagnostics\\Server\\class_RDServer.cs:line 280" string
+ TargetSite {Void EndProcessAuthentication(System.IAsyncResult)} System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}
authStream
- authStream {System.Net.Security.NegotiateStream} System.Net.Security.NegotiateStream
+ base {System.Net.Security.NegotiateStream} System.Net.Security.AuthenticatedStream {System.Net.Security.NegotiateStream}
CanRead false bool
CanSeek false bool
CanTimeout true bool
CanWrite false bool
+ ImpersonationLevel 'authStream.ImpersonationLevel' threw an exception of type 'System.Security.Authentication.InvalidCredentialException' System.Security.Principal.TokenImpersonationLevel {System.Security.Authentication.InvalidCredentialException}
IsAuthenticated false bool
IsEncrypted false bool
IsMutuallyAuthenticated false bool
IsServer true bool
IsSigned false bool
+ Length 'authStream.Length' threw an exception of type 'System.NotSupportedException' long {System.NotSupportedException}
+ Position 'authStream.Position' threw an exception of type 'System.NotSupportedException' long {System.NotSupportedException}
ReadTimeout -1 int
+ RemoteIdentity 'authStream.RemoteIdentity' threw an exception of type 'System.Security.Authentication.InvalidCredentialException' System.Security.Principal.IIdentity {System.Security.Authentication.InvalidCredentialException}
WriteTimeout -1 int
|
|
|
|
|
I found an example where the client specifies credentials:
http://msdn.microsoft.com/en-us/library/system.net.security.protectionlevel.aspx[^]
but I'm not happy that the client needs to know the username and password of the machine that the server is running on.
If I have to store username and password for various machines in my exe.config then that seems impractical.
I guess I will just go back to using TcpClient.Connect() and encrypting the data myself prior to transmission.
|
|
|
|
|
Well there a few major errors occcuring in the following program:
1) line 18: usleep was not declared in the scope
2) line 14,15,23,..: stray'\160' in the program
3) Also i am getting an error in my process.h file. Can somebody tell where i can get this file. I got it from:
http://www.koders.com/c/fid1DB5A7F33E56F9DDD9AFDC7EF0F05CF767EA426A.aspx
Here is the program:
#include<stdio.h>
#include<windows.h>
#include<pthread.h>
#include<process.h>
#include<unistd.h>
#include<stdlib.h>
/* This is our thread function. It is like main(), but for a thread */
void *threadFunc(void *arg)
{
char *str;
int i = 0;
str=(char*)arg;
while(i < 10 )
{
usleep(1);
printf("threadFunc says: %s\n",str);
++i;
}
return NULL;
}
int main()
{
pthread_t pth;
int i = 0; // this is our thread identifier
/* Create worker thread */
pthread_create(&pth,NULL,threadFunc,"processing...");
/* wait for our thread to finish before continuing */
pthread_join(pth, NULL); // void ** return value could go here
while(i < 10 )
{
usleep(1);
printf("main() is running...\n");
++i;
}
return 0;
}
|
|
|
|
|
Maybe you ought to post this in the C++ forum instead of C#
|
|
|
|
|
You could also try formatting your code properly (see the guidelines above) and clarifying exactly which lines your errors occur on, and whether these are compile or execution time errors.
|
|
|
|
|
I’ve using a Queue to store data and I do polling in order to know if the Queue contain data ( that I understand is not the correct approach)
For Example
private void PopDataFromQueue()
{
bool isRspOK;
byte [] data;
while (true)
{
//If so then stop the thread
if (m_isStopReadingQueueThread == true)
break;
if (m_queue.Count > 0)
{
lock (m_queue)
{
if (m_queue.Count > 0)
{
data = (byte [])m_queue.Dequeue();
isRspOK = m_scenario.Parse(sockBuf.SocketData);
if (isRspOK == true)
{
;
}
}
}
}
}
I need to implement approach that wait for event occur and not always check the Queue status
The function PopDataFromQueue is define as a thread
Something like this
private void PopDataFromQueue()
{
//create timer event that indicate in case the event that I waiting for not reach after some time , need to handle it
Timer timer = new timer(1000);
while (true)
{
//If so then stop the thread
if (m_isStopReadingQueueThread == true)
break;
Event = WaitForEvent(Queue.Add,Timer. expire); // need to wait for two type of events
Switch(Event)
{
case Queue.Dataexist:
data = (byte [])m_queue.Dequeue();
isRspOK = m_scenario.Parse(sockBuf.SocketData);
if (isRspOK == true)
{
;
}
Break;
Case timer.expire:
isStopReadingQueueThread =true;
break;
}
}
}
I try to look in the net and I didn’t found
Any advice?
Thanks
Ronen
|
|
|
|
|
you need to write your own queue that raises an event if data pushed or poped in/from queue.
|
|
|
|
|
you are correct by saying that the worker thread should be event-driven and should not poll...
I have used the following example to learn from:
Bounded Blocking Queue (One Lock)[^]
and within your worker thread (it must be a thread that is started in the constructor) use:
while (true)
{
lock (syncRoot)
{
while (iCount <= 0)
Monitor.Wait(syncRoot);
class_Message MessageWorker = messageQueue.Dequeue();
iCount--;
.
.
.
this has worked out really well and eventhough it's a blocking queue it works nice and fast !
|
|
|
|
|
I have come across something and wondered if it can be done.
private void Shape_CheckedChanged(object sender, EventArgs e)
{
if (rbDraw.Checked)
{
if (rbSelectShape.Checked)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Select;
}
if (rbDrawRect.Checked)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Rectangle;
}
if (rbDrawCircle.Checked)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Circle;
}
if (rbDrawTriangle.Checked)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Triangle;
}
if (rbLine.Checked)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Line;
}
if (rbText.Checked)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Text;
}
}
Console.WriteLine(imageViewer1.ShapeSelected.ToString());
}
Above is the code i used to check each radio button however i tried tidying it up with the bellow code and couldn't think of a way to set the enum depending on checked radio button.
foreach (RadioButton rb in gbShape)
{
if (rb.Checked == true)
{
imageViewer1.ShapeSelected = ImageViewer.Shape.Circle;
}
}
Any ideas
Thanx in advance
|
|
|
|
|
You can make use of Tag property of the radio buttons for this. While creating the buttons, set the Tag as enum value, like:
rbSelectShape.Tag = ImageViewer.Shape.Select;
Then in your foreach loop, use this:
imageViewer1.ShapeSelected = rb.Tag;
50-50-90 rule: Anytime I have a 50-50 chance of getting something right, there's a 90% probability I'll get it wrong...!!
|
|
|
|
|
Thank you for the response, that is a great idea and will make things shorter and easier to follow.
Can also do this for the other group boxes on the form.
Thanx George
|
|
|
|
|
In that case i would make a new class called ShapeRadioButton derived from RadioButton.
in that new derived class i would implement a Property called Shape..? from type of your enum.
using the tag would be a solution but i think my solution is not very difficult and would be better programming, think of it you want to use a second object than the tag object is used by you enum and the second gets what ?!? ^^ in the ShapeRadioButton you only need to implement the new property for the type and thats it.
greetz
|
|
|
|
|
I don't think i fully understand how that would work.
class ShapeRadioButton : System.Windows.Forms.RadioButton
{
private ImageViewer.Shape m_shape = ImageViewer.Shape.Select;
public ImageViewer.Shape Shape
{
get
{
return m_shape;
}
set
{
m_shape = value;
}
}
}
i made the class ^ however it still needs to be set somewhere> do you mean the designer will set each RadioButton to have an instance of "ShapeRadioButton". Then use it in the same way as the tag
Thax George
|
|
|
|
|
I have tried this solution however the following error occurs which i do not understand
Error 1 foreach statement cannot operate on variables of type
'System.Windows.Forms.GroupBox' because 'System.Windows.Forms.GroupBox'
does not contain a public definition for 'GetEnumerator'
The code is as follows:
if (rbDraw.Checked == true)
{
foreach (RadioButton rb in gbShape)
{
if (rb.Checked == true)
{
imageViewer1.ShapeSelected = (FileScroller.ImageViewer.Shape)rb.Tag;
}
}
}
|
|
|
|
|
ok use
if (rbDraw.Checked == true)
{
foreach (Control ctrl in in gbShape.Controls)
{
if (ctrl is RadioButton)
{
if (rb.Checked == true)
{
imageViewer1.ShapeSelected = (FileScroller.ImageViewer.Shape)rb.Tag;
}
}
}
}
your RadioButtonClass:
public class ShapeRadioButton : System.Windows.Form.RadioButton
{
private FileScroller.ImageViewer.Shape _shape;
public FileScroller.ImageViewer.Shape Shape{
get{return _shape;}
set{_shape = value;}
}
|
|
|
|
|
That should work only problem being the rb doesnt exsit anymore and ctrl will not allow:
if (ctrl.Checked == true)
|
|
|
|
|
ups sorry i forgot to cast the ctrl into a RadioButton
at rb.Checked use:
if (ctrl is RadioButton)
{
RadioButton rb = ctrl as RadioButton
if(rb.Checked)
{
...
}
}
|
|
|
|
|
Thank you for your help.
This code now works perfectly, i can use it on the other group boxes on the form too.
if (rbDraw.Checked == true)
{
foreach (Control ctrl in gbShape.Controls)
{
if (ctrl is RadioButton)
{
RadioButton rb = ctrl as RadioButton;
if (rb.Checked == true)
{
imageViewer1.ShapeSelected = (FileScroller.ImageViewer.Shape)rb.Tag;
}
}
}
}
Thank you again
George
|
|
|
|
|
I have a windows app in which I want to open a text file in Notepad. When a button is clicked, a file dialog must open which lets the user select a file to be opened in notepad. I know how to create an OpenFileDialog, but I don't know how to open the selected file in Notepad. How does one do this?
|
|
|
|
|
Check out the Process class in the System.Diagnostics namespace.
You should create a Process object, set its StartInfo properties to launch notepad and open your selected text file. Something like this.
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = @"C:\Windows\notepad.exe";
p.StartInfo.Arguments = @"C:\yourPath\yourTextFile.txt";
p.Start();
|
|
|
|
|
Process.Start(filename) opens the file in its default application, as if you double-clicked it in Windows Explorer.
|
|
|
|
|
Any idea how to do this in ASP.NET?
|
|
|
|
|
hi
I wanna truncate all data in data base
The problem in delete forign key
how i can do that????
|
|
|
|