2010-09-25 5 views
1

У меня есть лабораторная среда в VMware с WS2008R2-сервером и W7-клиентом. Я пытаюсь передать WCF-сервис-адрес с сервера и получать его в клиенте. Я использую System.Net.Sockets в C# .NET, и я могу успешно отправлять данные с сервера. По крайней мере, я выгляжу нормально с WinDump. Но когда я пытаюсь получить это на клиенте, он терпит неудачу. Я не могу понять, где проблема ...? Клиент может взаимодействовать с сервером другими способами и с моей WCF-службой, если я вручную укажу его адрес. На всякий случай я превратил свои брандмауэры в лабораторную среду.UDP-трансляция адреса службы WCF

[Update]

Я проверил WinDump на мой клиент-VM и тот же УДФ-сообщение showes здесь, а так, кажется, чтобы иметь возможность принимать вещание. Но почему arent метод ReceieveFrom возвращает что-нибудь? Я неправильно настроил клиентский сокет? Должен ли он привязываться к Any-адресу или его локальному ip? Ни работы ...

[/ Update]

Heres сервер-код:

public static class MulticastServer 
{ 
    static Socket socket; 
    static IPEndPoint ep = new IPEndPoint(IPAddress.Broadcast, 9050); 

    public static void Open() 
    { 
     socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); 
    } 

    public static void Send(string message) 
    { 
     socket.SendTo(Encoding.ASCII.GetBytes(message), ep); 
    } 

    public static void Close() 
    { 
     socket.Close(); 
    } 
} 

И клиент:

public static class MulticastClient 
{ 
    public static string ReceiveOne() 
    { 
     Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
     IPEndPoint ep = new IPEndPoint(IPAddress.Any, 9050); 
     socket.Bind(ep); 
     byte[] data = new byte[1024]; 
     EndPoint e = (EndPoint)ep; 
     int i = socket.ReceiveFrom(data, ref e); 
     socket.Close(); 
     return Encoding.ASCII.GetString(data, 0, i); 
    } 
} 

ответ

4

Я не уверен, где текущая проблема но, читая свой вопрос, я сразу понял, что вы изобретаете колесо. Перейдите на .NET 4.0 и используйте WCF Discovery, который именно для этой цели - поиск по UDP для обслуживания с данным контрактом и UDP на основе announcements об услугах. Кроме того, он основан на протоколе WS-Discovery, поэтому я предполагаю, что он должен быть совместимым. Разве это не лучше, чем обычное решение?

+0

Ahh, как мог Ive пропустить это! Благодаря! –