2010-03-10 4 views
3

나는 C# 강력한 데이터 형식을 변환하는 방법은 무엇입니까?

내가 다른 일 1 복잡한 클래스 사이에 들어있는 클래스 라이브러리를 가지고 .... 너희들 중 일부는이 문제를 도와 줄 수 있기를 바랍니다. 이 클래스 라이브러리는 솔루션의 다른 2 개 프로젝트에서 사용됩니다. 1 = 콘솔 응용 프로그램, 2 = 웹 서비스 응용 프로그램 (웹 사이트 응용 프로그램). 내가 메서드 호출의 1 개 매개 변수로 내 복잡한 클래스를으로 전달하는 ASMX 웹 서비스 참조를 만든 콘솔 응용 프로그램에서

.

클래스는 타입이다 : ScheduleSummaryTransport

콘솔 응용 프로그램에서 작업 클래스 라이브러리 DLL에서 바인드 된 오브젝트를 기대, 그리고 웹 서비스 참조에서 위 작업을 수행하는 기능. 그러나 웹 서비스 호출은 웹 서비스 참조에서 ... 유형의 매개 변수를 필요로합니다. > WebService.ScheduleSummaryTransport -

는 어떻게이 나는

ClassLibrary.ScheduleSummaryTransport

캐스팅 할 수 있습니까?

wsReporting.SendReportSummary((Reporting.ScheduleSummaryTransport) scheduleSummary); 

을하지만 비주얼 스튜디오에서 자사의 설계 시간 오류를 발견 :

내가 시도했습니다 ..... 표현 캐스트

지원하시기 바랍니다, 감사 할 수 없습니다

업데이트

코드 완성을 위해 :

/// <summary> 
     /// Sends the schedule report via email. 
     /// </summary> 
     /// <param name="scheduleSummary"> 
     /// The schedule summary. 
     /// </param> 
     private static void SendScheduleReport(ScheduleSummaryTransport scheduleSummary) 
     { 
      if (!Convert.ToBoolean(ConfigurationManager.AppSettings["EmailSummary"])) 
      { 
       return; 
      } 

      Trace.WriteLine(string.Empty); 
      Trace.WriteLine("Sending summary by email... please wait "); 

      Reporting.Reporting wsReporting = new Reporting.Reporting { Timeout = -1 }; 
      wsReporting.SendReportSummary((Reporting.ScheduleSummaryTransport) scheduleSummary); 
      Trace.WriteLine("Done..."); 
     } 

답변

4

WebService에 프록시 생성기 (wsdl.exe)는 클래스를 생성합니다. 이 새 클래스는 클라이언트에서 참조되는 클래스와 충돌합니다.

당신은 자동 생성 된 클래스를 제거해야합니다. 이렇게하려면 솔루션 탐색기 (상단의 아이콘)에 모든 파일을 표시하십시오. Reference.cs 클래스는 자동 생성 된 코드를 찾을 수있는 웹 서비스 참조의 하위 클래스로 제공됩니다. 여기에 using ClassLibrary을 추가하고 중복 클래스와 관련된 모든 코드를 삭제하십시오.

나를 위해 일했습니다. =)

+0

굉장한 대답 .... 대단히 감사합니다! –

3

관련없는 유형 인 경우 사이에을 전송할 수 없습니다. String에서 MemoryStream으로 전송하려는 것과 같습니다. 어떻게 될 것으로 예상됩니까? 컴파일러는 그것이 결코 작동하지 않을 것이라는 것을 안다. 그래서 그것을 시도하는 것을 멈춘다.

여기서 문제

는 처음에 여러 유형을 가지고있다. 당신이 일 수 있다면 가능하면을 피하십시오. 당신이 할 수 없다면, 두 종류의 변환 방법 중 하나를 써야 할 것입니다. 같은 클래스의 두 가지 버전이 왜

+0

그들은 정확히 동일한 개체입니다.C# 콘솔이 ClassLibrary DLL의 참조를 가져옵니다,하지만 WS 방법이 동일한 개체를 기대하고 있지만, 참조는 WS 프록시를 통해 라우팅 ...하지만 클래스 라이브러리에 - 단 1 개체가 존재 ... (죄송 존을 설명하기 어려운) ... –

+0

@JL - 웹 서비스 정의 .cs를 편집하여이 유형을 기대하십니까? 무엇보다 웹 서비스 참조 가져 오기 문제가 더 많이 들립니다. –

+0

좋아요. 그걸 시도해 봅시다 .... –

0

는 여전히 불분명 합니다만 당신이 참조와 두 곳의 클래스 라이브러리의 버전을 사용하는 곳으로 얻을 수없는 경우, 당신은 체크 아웃 할 수 있습니다 Automapper은 한 버전에서 다른 버전으로의 매핑을 처리합니다. 당신은 웹 서비스를 통해 전송되는 개체에 대한 모든 정보를 보유하는

관련 문제