2011-07-23 12 views
5

Tôi cần lấy địa chỉ IP cho tên máy chủ đã cho từ DnsEndPoint và chuyển đổi nó thành IPEndPoint. Tôi sẽ đi đâu để tới đó? WP7 thiếu một hàm Dns.GetHostEntry, vì vậy có cách nào để làm điều này mà không cần tạo một Socket, gửi dữ liệu đến máy chủ, sau đó nhận được ping từ máy chủ và đọc thuộc tính RemoteEndPoint để lấy địa chỉ IP của máy chủ không?WP7 Mango - Cách lấy địa chỉ IP cho tên máy chủ đã cho

Trả lời

5

Hãy thử sử dụng DeviceNetworkInformation.ResolveHostNameAsync trong không gian tên Microsoft.Phone.Net.NetworkInformation, như thế này:

public void DnsLookup(string hostname) 
{ 
    var endpoint = new DnsEndPoint(hostname, 0); 
    DeviceNetworkInformation.ResolveHostNameAsync(endpoint, OnNameResolved, null); 
} 

private void OnNameResolved(NameResolutionResult result) 
{ 
    IPEndPoint[] endpoints = result.IPEndPoints; 
    // Do something with your endpoints 
} 
2

Không có cách nào để thực hiện việc này trong khung công tác. Bạn có thể sử dụng một socket giả định rằng host hỗ trợ ping. Nó sẽ phụ thuộc vào mạng bạn đang chạy (Tôi cho rằng bạn không thể kiểm soát điều này) và các yêu cầu chính xác của ứng dụng.

Có thể dễ dàng hơn để ứng dụng của bạn hoạt động với địa chỉ IP và không yêu cầu tên máy chủ nếu tất cả những gì bạn có là địa chỉ IP.

+0

Các vấn đề là; Tôi đang xử lý các địa chỉ IP được gán động thay đổi thường xuyên và cập nhật chúng thông qua No-IP, nhưng tôi đoán; một lần nữa với Microsoft, giải pháp tốt nhất là đôi khi không có giải pháp. – IDWMaster

+0

Tôi đã kết thúc thiết lập dịch vụ UDP để tra cứu IP máy chủ lưu trữ. Không thực sự là một "giải pháp" cho thời điểm này, nhưng nó có thể là giải pháp tốt nhất hiện tại. – IDWMaster

2

Tôi nghĩ rằng Im đang xử lý cùng một vấn đề. Tôi cũng có một IP động cập nhật các dns với No-ip.

Đối với những gì tôi biết System.Net.Dns không có sẵn trong phiên bản Windows Phone này. Có thể trong các bản phát hành tiếp theo.

http://msdn.microsoft.com/en-us/library/system.net.dns.aspx

Khi bắt đầu ứng dụng của tôi Im đi để tạo ra một cuộc gọi dịch vụ web để các máy chủ (cho máy chủ web trong nó) yêu cầu các IPAddress. Tôi nghĩ rằng tôi sẽ giải quyết vấn đề trong thời gian chờ đợi.

Đây có thể là các dịch vụ WCF

[ServiceContract] 
public interface IService1 
{ 
[OperationContract] 
string GetIpAddress(string value); 
} 

public class Service1 : IService1 
{ 
    public string GetIpAddress() 
    { 
    // Add the proper error handling and collection matching of course 
     IPAddress s = Dns.GetHostAddresses("www.mysite.com")[0]; 
     return s.ToString(); 
    } 
    } 

Nếu các bạn tìm thấy một cách tiếp cận trực tiếp xin vui lòng cho tôi biết