|
Have you already considered wcf services ?
|
|
|
|
|
I heard WCF are promising but not sure if they fit for my requirements. Can WCF in such case? If yes, please provide some example links. thanks
Follow your goals, Means will follow you ---Gandhi---
|
|
|
|
|
I have to say, I am new to wcf,wpf & silverlight aswel, but have done some experimenting and test applications.
Both a WPF client and Silverlight client can use the same service, there should be loads of blogs,articles and tutorials about linking either.
The WCF / WPF Chat Application By Sacha Barber article here on codeproject should probably give a good example of how wcf can be used for multiple users, which you'll need in your game.
|
|
|
|
|
I will check Sacha's article. He writes some amazing things. Thanks for pointing.
Follow your goals, Means will follow you ---Gandhi---
|
|
|
|
|
One thing that may throw a wrench into your idea here is that basing a game on this technology may cause issues related to latency. I am not sure if a game environment is going to be great (may depend on the type of game) for a web service style architecture that forces you into an asynchronous model of service calls and async responses. At least not for ALL of the game interaction.
|
|
|
|
|
Latency is not that big of issue in this game. But, I am curious if there are other ways supported by .Net. Any suggestions Ray?
Follow your goals, Means will follow you ---Gandhi---
|
|
|
|
|
Good old fashioned IP connections and message passing works good in cases where you need fast response. Can't beat it unless you anticipate a high number of connections and are not looking at using a server farm. You can use a mixture of TCP and UDP for command and response type connections to keep your port utilization lower, maybe even a mixture if WPF and IP may be a good solution.
I guess it really depends more on the game type.
|
|
|
|
|
i have listbox inside a datagrid. when user click save button i want to get the selected value of the list.
One person's data is another person's program.
--J.Walia
|
|
|
|
|
You might to look at implementing a collection view model as given here[^].
Me, I'm dishonest. And a dishonest man you can always trust to be dishonest. Honestly. It's the honest ones you want to watch out for...
|
|
|
|
|
|
i want to get selected item of listbox.
One person's data is another person's program.
--J.Walia
|
|
|
|
|
The collection view model keeps the underlying data source aware of the current list item selected and you can get the selected row by using methods like the CurrentItem (available inside ICollectionView ).
Me, I'm dishonest. And a dishonest man you can always trust to be dishonest. Honestly. It's the honest ones you want to watch out for...
|
|
|
|
|
|
Hi
I am triing to send some aditional info from wcf client to server using custom MessageHeader.
Below is the class which should be sent inside message header.
public class UserCredentialsHeaderContent
{
public string UserName { get; set; }
public string Password { get; set; }
public UserCredentialsHeaderContent(string userName, string password)
{
UserName = userName;
Password = password;
}
public UserCredentialsHeaderContent()
{
}
}
And the custom MessageHeader:
public class UserCredentialsMessageHeader : MessageHeader
{
private const string HEADER_NAME = "UserToken";
private const string HEADER_NAMESPACE = "NameSpace";
public UserCredentialsHeaderContent UserCredentials { get; private set; }
public override string Name
{
get { return HEADER_NAME; }
}
public override string Namespace
{
get { return HEADER_NAMESPACE; }
}
public UserCredentialsMessageHeader()
{
}
public UserCredentialsMessageHeader(UserCredentialsHeaderContent userCredentials)
{
UserCredentials = userCredentials;
}
protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
{
XmlSerializer serializer = new XmlSerializer(typeof(UserCredentialsHeaderContent));
StringWriter stringWriter = new StringWriter();
serializer.Serialize(stringWriter, UserCredentials);
stringWriter.Close();
string text = stringWriter.ToString();
writer.WriteElementString(HEADER_NAME, HEADER_NAMESPACE, text);
}
public static UserCredentialsHeaderContent ReadHeader(Message request)
{
int headerIndex = request.Headers.FindHeader(HEADER_NAME, HEADER_NAMESPACE);
if (headerIndex != -1)
{
XmlNode[] contentNode = request.Headers.GetHeader<XmlNode[]>(headerIndex);
string text = contentNode[0].InnerText;
XmlSerializer deSerializer = new XmlSerializer(typeof(UserCredentialsHeaderContent));
StringReader stringReader = new StringReader(text);
UserCredentialsHeaderContent content = (UserCredentialsHeaderContent) deSerializer.Deserialize(stringReader);
stringReader.Close();
return content;
}
else
{
return null;
}
}
}
I am adding Header to outgoing message headers in the class that implements IClientMessageInspector:
public class ClientMessageInspector : IClientMessageInspector
{
#region IClientMessageInspectorImplementation
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
UserCredentialsMessageHeader msgHeader = new UserCredentialsMessageHeader(
new UserCredentialsHeaderContent("UserName", "Password"));
request.Headers.Add(msgHeader);
return null;
}
public void AfterReceiveReply(ref Message reply, object correlationState)
{
}
}
So far everything works OK. The problem presents it's self on the server side. I am triing to read the custom header like
public class TestService : ITestService
{
public string SendMessage(string message)
{
UserCredentialsHeaderContent content =
OperationContext.Current.IncomingMessageHeaders.GetHeader<UserCredentialsHeaderContent>("UserToken", "NameSpace");
return "Hello " + message;
}
}
In the upper method I get the UserCredentialsHeaderContent from the call to GetHeader. But all Properties of the UserCredentialsHeaderContent are null. I guess the class does not get deserialized properly, but I don't know how to solve this. Any idea will pe appreciated
|
|
|
|
|
I think you need to post this in the C# .NET this is the WPF / Silverlight venue.
|
|
|
|
|
TheArchitectmc∞ wrote: this is the WPF / Silverlight venue
hmm...ok.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
My apologies, this is the right place big guy....
|
|
|
|
|
The title of this forum is WPF / WCF / WF
Dave
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn) Why are you using VB6? Do you hate yourself? (Christian Graus)
|
|
|
|
|
Darn I guess I got whacked with the idiot stick today!
|
|
|
|
|
I know the feeling
Dave
BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn) Why are you using VB6? Do you hate yourself? (Christian Graus)
|
|
|
|
|
Do message headers had to be attached before any content is appended? Is it possible that you've added the message too late in the cycle? Can you attach it earlier?
|
|
|
|
|
I think that the header is addad at the correct time, but I guess there is a problem with deserialization.
Thank you for your reply
Uros
|
|
|
|
|
koleraba wrote: But all Properties of the UserCredentialsHeaderContent are null.
I don't see any place you're calling the deserialization code.
Am I missing something?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
No you are not missing it. When I was implementing the custrom header class, I was looking which metod to overrite to deserialize the header, but I did not find anything. I know that serialization should be done in the OnWriteHeaderContent but there is no OnReadHeaderContent. Do you know where the deserialization code should be. Thank you for your reply.
Uros
|
|
|
|
|
koleraba wrote: Do you know where the deserialization code should be.
A ReadHeader method is in your class, but you need to call it.
I modified the parameter type of your code like this:
public static UserCredentialsHeaderContent ReadHeader(MessageHeaders headers)
{
int headerIndex = headers.FindHeader(HEADER_NAME, HEADER_NAMESPACE);
if (headerIndex != -1)
{
XmlNode[] contentNode = headers.GetHeader<XmlNode[]>(headerIndex);
string text = contentNode[0].InnerText;
XmlSerializer deSerializer = new XmlSerializer(typeof(UserCredentialsHeaderContent));
StringReader stringReader = new StringReader(text);
UserCredentialsHeaderContent content = (UserCredentialsHeaderContent)deSerializer.Deserialize(stringReader);
stringReader.Close();
return content;
}
else
{
return null;
}
}
and called it like this
UserCredentialsHeaderContent headercontent = UserCredentialsMessageHeader.ReadHeader(OperationContext.Current.IncomingMessageHeaders);
Works fine.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark thank you for your time. In the mean time I found the same solution and it works fine. But as you said you have to call the deserialization code by your self - there isn't any method that you could override.
Thanks again for your time
Uroš
|
|
|
|
|
How does one override the default listview item background:
clear - for unselected items
blue - for selected items when the listview has keyboard focus
silver - for seleected items when the listview does not have keyboard focus?
|
|
|
|