【问题标题】:Deploying a XML Web Service with UDP other than HTTP使用 UDP 而非 HTTP 部署 XML Web 服务
【发布时间】:2026-01-26 00:10:02
【问题描述】:

正如我已经弄清楚的那样。我想在 IIS 上创建一个 Web 服务来测试我的 Web 服务。但我的问题是,我必须选择绑定类型。有 HTTP,net.tcp .... 但我不仅与客户端有 HTTP 连接。在我的情况下,我必须使用他们的 IP 地址(它存储在数据库中)向客户端发送数据。所以我的问题是我应该如何配置它。 服务器端也包含此代码

public void Notify(string ipAddress) //List<string> ipList
    {
        try
        {
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            IPAddress ip = IPAddress.Parse(ipAddress);

            IPEndPoint endPoint = new IPEndPoint(ip, 15000);
            string notification = "new_update";
            byte[] sendBuffer = Encoding.ASCII.GetBytes(notification);
            sock.SendTo(sendBuffer, endPoint);
            sock.Close();
        }
        catch
        {
        }
    }

我还想了解有关配置 IIS 以部署具有更多详细信息的 Web 服务的任何资源。 谢谢!!

【问题讨论】:

  • 我认为你做不到。 AFAIK 只能通过 HTTP 或 HTTPS 访问 Web 服务。顺便说一句:说 Web 服务只能由 IIS 托管是不正确的。您也可以自己托管它,例如作为 Windows 服务的一部分。
  • 好的,我已经编辑过了。我只是想测试一下。有没有其他方法可以让它工作。

标签: c# visual-studio-2010 web-services iis-7 udp


【解决方案1】:

部署 Web 服务与在 IIS7 管理器中部署网站相同。 这段代码在 IIS7 上运行良好,但是在世界场景中使用这段代码时会出现问题。与客户端服务器概念的偏差(例如:客户端同时充当服务器)。 Web 服务可以通过在 Web 方法中使用以下代码来获取客户端 IP 地址

string IPAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
string port = HttpContext.Current.Request.ServerVariables["REMOTE_PORT"];
if (IPAddress == null)
{ 
            IPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}

但这不会提供客户端的真实 IP 地址。这取决于网络设备和 ISP 策略。因此,在采用这种方法之前最好重新考虑设计。但这在本地网络中有效。

【讨论】: