| Subject: Cannot implicitly convert type 'object' to 'System.ServiceModel.PeerNodeAddress'. |
| Group: microsoft.public.windows.developer.winfx.indigo |
| Date: 12/28/2007 9:57:13 AM |
| From: drmcgee2000@yahoo.com |
Greetings, I have built a WCF client with a custom peer resolver as a chat application. The code for both applications (client and server) work fine, and I am able to resolve clients through the Resolver Contract; HOWEVER, I am not sure what to pass to register the clients using the Regeister method with parameters "MeshId" and "PeerNodeAddress". In my research I know the the PeerNodeAddress is encapsulated in a seal class PeerNodeAddress. I have searched the Internet for an example of what the PeerNodeAddress would look like as a passed parameter, but there is nothing out there. My question: When I call the Register method to register my client with the server what am I passing? Am I passing the IP Address of the client? If so, how would I cast the IPAddress type into a PeerNodeAddress? Does anyone have a working example? Here is the error message I get when I try to assign the client IP address: <code> PeerNodeAddress nodeAddress; IPHostEntry ips = Dns.GetHostEntry(Dns.GetHostName()); foreach (IPAddress address in ips.AddressList) { if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) nodeAddress = address as PeerNodeAddress; } <error> Cannot implicitly convert type 'object' to 'System.ServiceModel.PeerNodeAddress'. An explicit conversion exists (are you missing a cast?) Question, what is the correct cast? |
| Back |
| Subject: Re: Cannot implicitly convert type 'object' to 'System.ServiceModel.PeerNodeAddress'. |
| Group: microsoft.public.windows.developer.winfx.indigo |
| Date: 12/28/2007 12:57:44 PM |
| From: drmcgee2000@yahoo.com |
On Dec 28, 9:57=A0am, drmcgee2...@yahoo.com wrote: > Greetings, > > I have built a WCF client with a custom peer resolver as a chat > application. The code for both applications (client and server) work > fine, and I am able to resolve clients through the Resolver Contract; > HOWEVER, I am not sure what to pass to register the clients using the > Regeister method =A0with parameters "MeshId" and "PeerNodeAddress". > > In my research I know the the PeerNodeAddress is encapsulated in a > seal class PeerNodeAddress. I have searched the Internet for an > example of what the PeerNodeAddress would look like as a passed > parameter, but there is nothing out there. > > My question: > > When I call the Register method to register my client with the server > what am I passing? Am I passing the IP Address of the client? If so, > how would I cast the IPAddress type into a PeerNodeAddress? Does > anyone have a working example? > > Here is the error message I get when I try to assign the client IP > address: > > <code> > > PeerNodeAddress nodeAddress; > > IPHostEntry ips =3D Dns.GetHostEntry(Dns.GetHostName()); > foreach (IPAddress address in ips.AddressList) > { > =A0 =A0 =A0if (address.AddressFamily =3D=3D > System.Net.Sockets.AddressFamily.InterNetwork) > =A0 =A0 =A0 =A0 =A0 nodeAddress =3D =A0address as PeerNodeAddress; > > } > > <error> > > Cannot implicitly convert type 'object' to > 'System.ServiceModel.PeerNodeAddress'. An explicit conversion exists > (are you missing a cast?) > > Question, what is the correct cast? OK, I solved the issue, and for anyone whom comes accross the same issue, here is my fix. In my code above I was trying to do a simple assignment; however, this is not possible because no cast is possible because the PeerNodeAddress is a sealed class. Therefore, if you instantiate a new nodeAddress with a new implementation of the Service Endpoint, you can then pass the AddressList from the IPAddress object and the code works wonderfully. Hope this helps you. <code> foreach (IPAddress address in ips.AddressList) { if (address.AddressFamily =3D=3D System.Net.Sockets.AddressFamily.InterNetwork) { ReadOnlyCollection<IPAddress> ip =3D new ReadOnlyCollection<IPAddress>(ips.AddressList); nodeAddress =3D new PeerNodeAddress(new EndpointAddress("http://137.51.145.137:8001/servicemodel/service"), ip); } } |
| Back |