2017-12-27 35 views
0

WCF 서비스가 있습니다. 이제 콘솔 응용 프로그램으로 변환하고 싶습니다. 기본적으로 간단한 서비스입니다. PowerShell 요청에 의한 클라이언트 요청에 따라 2 개의 작업 만 수행합니다.WCF 서비스를 콘솔 응용 프로그램으로 변환

Invoke-WebRequest "http://localhost:10000/backup/DoBackup?id=BackupClient1" 

또는

Invoke-WebRequest "http://localhost:10000/backup/DoBackup?id=BackupClient2" 

내 서비스는이이 요청에 대한 요청을 수신합니다.

myService service = new myService(_settings); 
    backupServiceHost = new WebServiceHost(service, _backupAddress); 
    WebHttpBinding binding = new WebHttpBinding(); 
    string address = ""; 
    ServiceEndpoint endpoint = backupServiceHost .AddServiceEndpoint(typeof(ISnapshotServiceContract), binding, address); 
    backupServiceHost .Open(); 

내 콘솔 응용 프로그램에 WebServiceHostWebHttpBinding을 사용할 수 없습니다

나는이 WCF의 코드가 있습니다. 무엇이 가장 좋은 대체 무엇입니까? 간단한 HttpClient을 사용하려고합니다. 하지만 올바른 선택인지 확실하지 않습니다.

답변

0

왜 명령 줄 매개 변수를 사용하지 않고 WebServiceHost을 사용하지 마십시오. 그런 다음 args[]의 기본 기능 (예 : 참조)을 비교하여 BackupClient1 명령인지 또는 BackupClient2 명령인지 확인할 수 있습니다.

이 같은 백엔드를 사용하여 더 당신이 BackupClient1 명령의 기능과 별도의 라이브러리에 BackupClient2 명령을 추출하고 프론트 엔드 (WCF 및 명령 줄을) 할 수 있습니다이 개념을하십시오.

WCF 서비스가 필요한 경우 (아래 의견에 명시된 바와 같이) MSDN article을 참조하십시오. 당신은 당신의 구성을 제공하고 좋은 방법으로 프로세스를 종료 할 것을 표시하는 방법을 파악해야합니다하지만이 같은 뭔가로 요약한다 :

String baseAddress = "http://localhost:10000/backup"; 
BasicHttpBinding binding = new BasicHttpBinding(); 

using (ServiceHost host = new ServiceHost(typeof(myService))) 
{ 
    host.AddServiceEndpoint(typeof(IMyService), binding, baseAddress); 
    host.Open(); 

    while(true) { 
     // Figure out how to exit this loop - e.g. listen to some command from service 
    } 
} 
+0

그러나 클라이언트는 PS 호출 - WebRequest 클래스 "로 요청해야합니다 http : // localhost : 10000 /. 그래서 나는 cmd 인자 – masiboo

+0

을 사용할 수 없다.이 경우에는 WCF'ServiceHost'를 인스턴스화하는 방법을이 샘플에서 참조 할 수있다 (https://docs.microsoft.com/en-us/dotnet)./framework/wcf/feature-details/how-to-create-a-service-endpoint-in-code)를 사용하면 서비스를 중지하는 방법을 알아야합니다. 예를 들어, 서비스 및 추가 명령을 사용하여 서비스가 종료되어야 함을 나타냅니다. – shrpq