2016-10-19 11 views
0

간단한 양식으로 (다른 많은 것들 중에서) 다른 웹 서비스에 두 개의 SOAP 호출을하는 콘솔 응용 프로그램을 작성했습니다. 이것은 독립형 솔루션 이었으므로 두 개의 WSDL 파일을 서비스 참조로 넣고 래퍼 클래스를 만들어 호출 한 다음 데이터를 반환했습니다. 프로젝트에 GetSessionSubscriptionNotifications이라는 두 개의 서비스 참조를 만들고 두 개의 래퍼 클래스를 작성하여 비누 클라이언트를 인스턴스화하고 초기화하고 호출하고 데이터를 반환했습니다. 코드는 독점적이므로 스 니펫 만 표시 할 수 있습니다.Console C# app에는 여러 개의 프로젝트가 있습니다. SOAP 호출에 대한 서비스 참조가 별도로 필요합니다. 위로 가기 종속성이 올바르지 않습니다.

솔루션 탐색기는 기본적으로 보여줍니다 내가

using MyNamespace.GetSession; // the autogenerated SOAP client 

namespace MyNamespace.MySolution.Code 
{ 
    class SOAP_GetSession { 

    public static string GetAppToken() { 

     string env = configFile.GetConfigValue("Environment"); 
     string userName = configFile.GetConfigValue("UserName"); 
     string password = configFile.GetConfigValue("Password"); 
     string appId = configFile.GetConfigValue("ApplicationId"); 

     string appToken = ""; 

     try { 
     ServiceClient sc = new ServiceClient(); 
     SessionResponse sr = sc.GetSession(env, userName, password, appId); 
     appToken = sr.ApplicationSession; 
     } 
     catch (...) { 
     // do exception handling 
     } 
     return appToken; 
    } 
    } 
} 

내가 클래스에서 중요하지 않은 대부분의 코드 생략 썼다 SOAP_GetSession.cs에서

Solution 'MySolution' 
    MySolution 
    Properties 
    References 
    ServiceReferences (folder) 
     GetSession 
     SubscriptionNotifications 
    Code (folder for .cs files) 
     Program.cs 
     EmailUtil.cs 
     DataRepository.cs 
     SOAP_GetSession.cs 
     SOAP_SendSubscriptionNotifications.cs 
    App.config 
    packages.config 

(부분 코드), 그러나 이것은 본질이며, 그것은 잘 작동합니다. 이제 두 개의 SOAP 호출을 가져 와서 솔루션 내에서 클래스 라이브러리로 별도의 프로젝트를 만들고 SOAP 기능을 이러한 프로젝트로 이동하여 프로젝트를 다른 솔루션에서 그대로 사용할 수있게하려고합니다. 나는 하루 종일 끝없는 참조 및 네임 스페이스 문제를 겪고있다. 프로젝트가 종속 관계가없는 독립형이며 각 프로젝트가 자체 ServiceReference WSDL 클라이언트를 가지고 있음에도 불구하고 "using", 참조, 네임 스페이스 및 종속성의 올바른 조합을 얻을 수 없어 내 클라이언트 코드에서 SOAP 클라이언트의 객체와 메소드. 내가 시도한 모든 것은 ServiceClient 또는 GetSession() 또는 ServiceResponse 참조가 네임 스페이스에서 발견되지 않는 오류를 유발합니다. 나는 네임 스페이스를 사용하여 그것들을 수식하고, 문장을 사용하여 삽입했으며, 내가 생각할 수있는 다른 것들은 아무 소용이 없다.

누구나 내가 위에서 보여준 것과 같은 간단한 클래스와 메소드를 스케치 할 수있다. 그 프로젝트는 자체 프로젝트에서 작동하며 기본 시작 프로젝트에서 참조 할 수 있습니까?

+0

클래스 라이브러리 dll과 마찬가지로 다른 프로젝트에서 콘솔 응용 프로그램을 참조 할 수 있습니다. 자신의 프로젝트에서 서비스 참조를 분리 할 필요는 없습니다. –

+0

관리자가 각자의 프로젝트에서 각 서비스 참조를 분리하고이를 실행하고 결과를 반환하는 래퍼 클래스를 작성하도록 요청 받았습니다. 그렇게하면 여러 콘솔 응용 프로그램을 사용하여 여러 가지 솔루션으로 프로젝트를 혼합하고 일치시킬 수 있습니다.위의 샘플에서 GetAppToken() 메서드가있는 SOAP_GetSession 클래스를 여러 솔루션에 추가하고 여러 솔루션에서 사용할 수 있습니다. 단일 프로젝트 솔루션에 포함될 때 작동하는 메서드는 클래스 라이브러리 dll에있는 클래스가있는 2 프로젝트 솔루션으로 빌드되지 않습니다. – MiddleAgedMutantNinjaProgrammer

+0

나는 당신의 필요를 이해합니다. 귀하의 프로젝트에서 생성 된 실행 파일을 다른 프로젝트의 클래스 라이브러리로 사용할 수 있습니다. 정말로 재사용이 필요한 경우에는 격리가 반드시 필요하지 않습니다. 코드를 별도의 프로젝트로 옮기려는 결정은 부담스럽지 않습니다. 물리적 코드 분리가 필요한 경우에만 프로젝트를 만듭니다. 힌트 : 물리적 코드 분리가 거의 필요하지 않습니다. 논리적 코드 분리가 필요한 것이며, 이는 네임 스페이스를 통해 이루어집니다. –

답변

0
  1. 새 클래스 라이브러리 프로젝트를 만듭니다.
  2. 콘솔 응용 프로그램 프로젝트
  3. 에서 삭제 서비스 참조가 새로운 프로젝트에 대한 참조를 추가하는 프로젝트에 SOAP_GetSession.cs 및 SOAP_SendSubscriptionNotifications.cs 이동
  4. 여기에 웹 서비스에 대한 서비스 참조를 추가 콘솔 응용 프로그램에 SOAP_GetSession을 사용할 필요가 파일에서 콘솔 응용 프로그램
  5. 이이 모양을 것입니다 당신이 using MyNamespace.MySolution.Code

추가하기 같은 :

Solution 'MySolution' 
    MySolution 
    Properties 
    References 
     MyClassLibrary 
     All other references 
    Code (folder for .cs files) 
     Program.cs 
     EmailUtil.cs 
     DataRepository.cs 
    App.config 
    packages.config 
    MyClassLibrary  
    Properties 
    References 
    ServiceReferences (folder) 
     GetSession 
     SubscriptionNotifications 
    Code (folder for .cs files) 
     SOAP_GetSession.cs 
     SOAP_SendSubscriptionNotifications.cs 
    App.config 
    packages.config 

그런 다음이 생성됩니다 다른 프로젝트에서 MyClassLibrary을 참조 할 수 있습니다. 모든 프로젝트에 서비스 참조를 추가 할 필요가 없습니다. 엔드 포인트 및 기타 서비스 구성 설정을 라이브러리 app.config에서 작성한 모든 최상위 프로젝트의 기본 app.config로 복사해야 할 수도 있습니다.

+0

감사합니다. 이 방법을 시도해보고 작동하는지 다시 알려 드리겠습니다. 나는 현재이 앱보다 우선 순위가 높은 다른 앱을 개발 중이다. 나는 이번 주말에 그것을 시험해 보겠다. – MiddleAgedMutantNinjaProgrammer