Windows Vista Beta | WinVistaBeta.com - Message | Cannot implicitly convert type 'object' to 'System.ServiceModel.PeerNodeAddress'.

January 05, 2009  
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