![](/img/trans.png)
[英]Visual Studio 2010 - Application not starting up through asp.NET Development Server but works on the Production Server
[英]ASP.NET UDP socket code works in development, but not in production on IIS
我在ASP.NET Web應用程序的單獨線程中運行以下UDP廣播偵聽器作為靜態組件。 為什么我會這樣做真的,不重要,但部署的原因讓我感到不舒服。 我有幾個控制台應用程序發送UDP廣播,我編碼測試並確認此線程及其代碼在VS2005開發Web服務器上的Visual Studio下運行時工作,但我編譯代碼並將其部署到另一台機器的那一刻並在IIS下運行它 - 它停止工作。 此外,它不是錯誤,它只是不起作用。
log4net日志記錄似乎只能在Init()方法中工作,但不能在線程中工作(這很奇怪)。 但是我已經在線程中添加了一些File.AppendAllText
,它似乎正在執行,但據我所知,它停在行byte[] received = mUdpClient.Receive(ref mGroupEP);
我確保端口是開放的,並在控制台應用程序中測試(有效),我已經檢查了權限,甚至使默認身份使用本地系統用戶帳戶,但仍然沒有。 我檢查了防火牆,檢查了事件日志 - 什么都沒有。 沒有錯誤,只是沒有工作。
我想知道是否可能會將IIS作為安全措施關閉System.Net請求,但我找不到任何可能支持該假設的內容。
public class UDPBroadcastListener {
#region Members
private ILogger mLogger = NullLogger.Instance;
private readonly int mPort;
private UdpClient mUdpClient;
private IPEndPoint mGroupEP;
public event EventHandler<GenericEventArgs<byte[]>> Received;
private Thread mThread;
#endregion
public UDPBroadcastListener(int port) {
mPort = port;
}
public void Init() {
try {
Logger.WarnFormat("Setting up the UDP packet listener on port {0}", mPort);
mGroupEP = new IPEndPoint(IPAddress.Any, mPort);
mUdpClient = new UdpClient();
mUdpClient.EnableBroadcast = true;
mUdpClient.Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReuseAddress,
true);
mUdpClient.Client.Bind(mGroupEP);
Logger.InfoFormat("Successfully bound the UDP packet listener to the the port.");
mThread = new Thread(UpdateThread);
mThread.IsBackground = true;
Logger.Info("Starting the background listener thread.");
mThread.Start();
Logger.InfoFormat("Background listener thread started ok.");
} catch (Exception e) {
Logger.Error(e.Message, e);
}
}
public void Close() {
if (mThread != null) {
mThread.Abort();
}
if (mUdpClient != null) {
mUdpClient.Close();
mUdpClient = null;
}
}
public Thread Thread {
get { return mThread; }
}
private void UpdateThread() {
Logger.Info("Listener thread started.");
while (true) {
try {
Logger.Info("Waiting for broadcast");
byte[] received = mUdpClient.Receive(ref mGroupEP);
Logger.InfoFormat("Received {0} bytes", received.Length);
OnReceived(received);
} catch (Exception ex) {
Logger.Error(ex.Message, ex);
}
}
}
protected void OnReceived(byte[] pData) {
EventHandler<GenericEventArgs<byte[]>> handler = Received;
if (handler != null) Received(this, new GenericEventArgs<byte[]>(pData));
}
public virtual ILogger Logger {
get { return mLogger; }
set { mLogger = value; }
}
#region Dispose
private bool mDisposed = false;
public void Dispose() {
if (mDisposed) return;
mDisposed = true;
Close();
}
~UDPBroadcastListener() {
Dispose();
}
#endregion
}
}
我現在變得非常絕望。 請幫忙。 :(
您可以嘗試使用TCPView進行調查(它也顯示UDP)以查看生產服務器上是否顯示任何內容。 查看“ Windows防火牆設置疑難解答 ”,雖然這是針對XP而我懷疑您的生產服務器是XP,但無論如何它可能會有所幫助。 請參閱netstat示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.