여러 시작 프로젝트 간의 Visual Studio 지연?
솔루션의 시작 프로젝트 사이에 약간의 지연을 추가하는 방법은 무엇입니까?

Windows Service를 시작한 후 2-3초 후에 클라이언트 프로젝트를 시작했으면 합니다.
이게 왜 필요한 거지?
윈도우즈 서비스는 소켓 서버를 실행하고 클라이언트는 소켓을 실행하여 서버에 연결합니다.Windows Service가 Client보다 느리게 로드되므로 아직 실행되지 않은 서버에 연결할 때 클라이언트 측에서 예외가 발생합니다.
클라이언트 내에 재시도 메커니즘을 추가할 것입니다.이러한 방식은 "Visual Studio에서 시작" 사례에서 도움이 될 뿐만 아니라 실제 클라이언트가 연결되는 동안 서버가 다시 시작되는 경우에도 도움이 됩니다.서버가 더 빠른 컴퓨터에 있다는 것이 서버를 다시 시작할 필요가 없다는 것을 의미하지는 않습니다. 그렇죠?
실제로 서버가 연결되어 있는 동안 서버가 다시 시작되더라도 클라이언트가 복구할 수 있는 방식으로 이 재시도 메커니즘을 추가할 수 있습니다.물론 프로젝트가 무엇을 하고 있는지에 따라 다릅니다.
Mutex 잠금을 사용하여 두 시작 프로젝트를 동기화할 수 있습니다.
프로그램 1(스타트업 프로젝트 1):
namespace ConsoleApplication1
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
class Program1
{
private static bool isNewMutexCreated = true;
private static Mutex mutex;
static void Main(string[] args)
{
mutex = new Mutex(true, "Global\\ConsoleApplication1", out isNewMutexCreated);
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
Console.WriteLine("Application1 executed on " + DateTime.Now.ToString());
Console.ReadKey();
}
static void CurrentDomain_ProcessExit(Object sender, EventArgs e)
{
if (isNewMutexCreated)
{
Console.WriteLine("Mutex Released");
mutex.ReleaseMutex();
}
}
}
}
프로그램 2(스타트업 프로젝트 2):
namespace ConsoleApplication2
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
class Program2
{
static void Main(string[] args)
{
Mutex mutex = null;
Thread.Sleep(5000);
while (mutex == null)
{
try
{
mutex = Mutex.OpenExisting("Global\\ConsoleApplication1");
}
catch (Exception)
{
Console.WriteLine("Mutex not found on " + DateTime.Now.ToString());
Thread.Sleep(3000);
}
}
Console.WriteLine("Application2 executed on " + DateTime.Now.ToString());
Console.ReadKey();
}
}
}
테스트를 위한 또 다른 간단한 옵션은 디버거가 다음과 같이 연결된 경우 클라이언트를 지연시키는 것입니다.
if (System.Diagnostics.Debugger.IsAttached)
{
System.Threading.Thread.Sleep(2000);
}
당신은 그것을 포장할 수 있습니다.#if DEBUG원한다면 차단합니다.어쨌든 저는 이것이 최소한의 일이어야 한다고 생각합니다 :)
여러 개의 시작 프로젝트의 경우 동시에 또는 임의로 지정되지 않은 순서대로 로드됩니다.
http://msdn.microsoft.com/en-us/library/09138bex(v=vs.90).aspx
따라서 "윈도우 서비스" 뒤에 "클라이언트"를 지정하면 문제가 없을 수 있습니다.그리고 위에서 제안한 코딩 방법을 원하지 않는 경우(테스트 전용) 원하는 지연 후 다른 솔루션의 "클라이언트" 프로세스를 수동으로 솔루션에 연결할 수 있습니다.http://msdn.microsoft.com/en-us/library/c6wf8e4z(v=vs.100).aspx
클라이언트를 시작한 후에 시작해야 하는 경우 목록을 이전에 시작한 순간처럼 조정해야 합니다!
저는 또한 "/wait"를 코딩할 것입니다. 앱을 로드할 때 해당 플래그가 발견되면 사용에 유용할 수 있을 때까지 기다립니다.
서버 프로젝트를 단일 시작 프로젝트로 설정하고 이 매크로를 사용하여 서버와 클라이언트를 지연된 상태로 시작할 수 있습니다.
Sub DebugServerAndClientWithDelay()
DTE.Debugger.Go(False)
System.Threading.Thread.Sleep(2000)
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("SolutionName\ClientProjectName").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance")
End Sub
도구 모음에 단추를 추가하거나 바로 가기 키를 사용하여 이 매크로를 실행할 수 있습니다.
소켓이 열려 있는지 확인하는 절차만 추가하면 됩니다.소켓이 열려 있으면 코드를 계속 실행하고 소켓이 열려 있지 않은지 다시 확인합니다.이렇게 하면 나중에 윈도우 서비스를 시작해도 문제가 없습니다.
현재 작업 중인 n-tier 어플리케이션의 경우 Romil에서 제안한 Mutex 메서드(약간 다른 코드이지만 동일한 원리)를 결합하여 [Conditional("DEBUG")] 속성이 적용된 메서드 내에서 캡슐화했습니다(그래서 릴리스 모드에서 제거됨).또한 mutex 로직을 if(System)로 묶습니다.진단.디버거.연결됨) QA 빌드에서 디버그 모드를 사용하므로 {...}.
우리는 원래 쓰레드를 사용했습니다.대부분의 개발자 컴퓨터에서 작동하는 대기 시간으로 잠을 잤지만, 개발자의 컴퓨터 속도가 다양하고 서버 부트스트래퍼에 점점 더 추가되면서 대기 시간을 계속 늘려야 했기 때문에 문제가 발생했습니다.
지연을 설정하는 인수를 클라이언트 애플리케이션에 전달하는 것이 어떻습니까?
static void main(string[] args)
{
// Sleep some time
int delay;
if (args.Length > 0 && int.TryParse(args, out delay))
{
Thread.Sleep(delay);
}
// Initialize client
}
이제 지연 시간(밀리초)을 프로젝트 시작에 대한 명령줄 인수에 추가할 수 있습니다.
가능하면 구조적으로 문제를 해결하는 것이 좋으니 고객과 서버가 언제 시작하든 상관없다는 데도 동의합니다.
언급URL : https://stackoverflow.com/questions/10349311/visual-studio-delay-between-multiple-startup-projects
'programing' 카테고리의 다른 글
| 동일한 라인에 새 출력 인쇄 (0) | 2023.05.10 |
|---|---|
| 게시물:제약 조건이 없는 경우 제약 조건 추가 (0) | 2023.05.10 |
| jQuery를 사용하여 입력이 비어 있는지 확인합니다. (0) | 2023.05.10 |
| Mongoose 스키마 선택사항 필드 (0) | 2023.05.10 |
| Visual Studio의 다른 포트에서 Azure Function 앱을 실행하는 방법 (0) | 2023.05.10 |