WSE 기반 보고서 인쇄 서비스 만 들 기 및 구현 논의


WSE 기반 보고서 인쇄 서비스 만 들 기 및 구현 논의http://www.microsoft.com/china/community/program/originalarticles/TechDoc/WSE_Print.mspx
요약:
노 언 씨 의 WEB 보고서 인쇄 실현 에 관 한 글 을 본 사람 은 반드시 안에 제 공 된 해결 방안 에 대해 절 개 를 잘 할 것 입 니 다. 본 고 는 여러분 에 게 더욱 유연 한 인쇄 작업 흐름 을 보 여 주 려 고 합 니 다. 그리고 어느 정도 실용성 을 가지 고 있 습 니 다.여러분 들 이 본문 을 읽 기 전에 노 언 선생 의 두 편의 글 을 먼저 읽 는 것 을 권장 합 니 다. 그리고 본 고 는 마이크로소프트 WSE (1.0) 를 보조 도구 로 사용 하 였 습 니 다. 이에 대해 낯 선 친구 들 은 먼저 개념 적 인 글 을 참고 하 는 것 을 권장 합 니 다. 저 는 문장의 마지막 에 참고 자료 와 필요 한 도 구 를 열거 하여 여러분 들 이 스스로 체험 할 수 있 습 니 다.
목차
머리말
소프트웨어 원리
프로그램 구현
주의 사항
총결산
참고 자료
머리말:
WSE 는 첨부 파일 의 전송 을 지원 하 는 매우 편리 한 기능 을 제공 합 니 다. 비록 우 리 는 다른 방식 으로 이 목적 을 달성 할 수 있 습 니 다. 예 를 들 어 byte 형의 데 이 터 를 직접 되 돌려 줄 수 있 지만 대부분 응용 프로그램 에 있어 서 첨부 파일 을 직접 되 돌려 주 는 것 입 니 다. 예 를 들 어 그림 이 더욱 진실 합 니 다. 제 글 의 제목 을 오해 하지 마 십시오.웹 서 비 스 를 만 들 면 인쇄 를 편리 하 게 실현 할 수 있 을 것 이 라 고 생각 합 니 다. 우리 의 소프트웨어 원리 와 최종 인쇄 방식 은 노 언 씨 가 언급 한 것 과 크게 다 르 지 않 습 니 다. 우 리 는 웹 서비스의 강력 한 투과 성 을 이용 하여 이 방식 을 더욱 유연 하 게 하고 응용 과 확대 가 쉽 습 니 다. 본 고 에서 사용 하 는 코드 는 모두 C \ # 로 작 성 했 습 니 다.
소프트웨어 원리:
본 고 는 XML 형식의 데 이 터 를 사용 하여 클 라 이언 트 는 인쇄 해 야 할 데이터 와 기본 적 인 매개 변수, 예 를 들 어 이미지 크기, 이미지 형식 등 을 서버 에 전송 하고 서버 측은 클 라 이언 트 의 요구 에 따라 특정한 한 장 또는 여러 장의 그림 을 생 성하 여 클 라 이언 트 에 게 되 돌려 주 며 클 라 이언 트 의 인쇄 프로그램 에서 통일 적 으로 처리한다.이 논 리 를 보면 우 리 는 모든 업무 규칙 이 서버 에서 완전히 작 동 되 고 클 라 이언 트 는 소량의 코드 만 있 으 면 보고서 의 인쇄 를 실현 할 수 있다 는 것 을 알 수 있다.이렇게 하면 각종 업그레이드 로 인 한 번 뇌 를 피 할 수 있다. 실제 운용 에서 한 가지 또는 여러 가지 도 표를 추가 하 라 고 요구 할 때 우리 가 해 야 할 일 은 서버 측의 업무 규칙 을 증가 하거나 수정 하 는 것 일 뿐 이 고 고객 이 해 야 할 일 은 우리 에 게 이런 도 표를 인쇄 하 라 고 알려 주 는 것 일 뿐이다.
본 고 는 간단 한 XML 데 이 터 를 사용 하여 시범 용 으로 만 제공 하고 클 라 이언 트 의 Demo 데 이 터 는 다음 과 같다.
<?xml version="1.0" encoding="utf-8"?>
    <Root PrintType="line" Width="450" Height="500" Title="Print Demo">
        <Child Text="1" Value="100" Color="Black">
        </Child>
        <Child Text="2" Value="60" Color="Orange">
        </Child>
        <Child Text="3" Value="30" Color="Red">
        </Child>
        <Child Text="4" Value="40" Color="Gray">
        </Child>
        <Child Text="5" Value="90" Color="Blue">
        </Child>
        <Child Text="6" Value="60" Color="Green">
		</Child>
</Root>

그 중에서 PrintType 은 클 라 이언 트 가 요구 하 는 인쇄 형식 입 니 다.
프로그램 구현:
서버 엔 드 코드
이 시스템 도 마찬가지 로 Abstract Factory 의 디자인 모델 을 사용 하여 서버 의 편리 한 확장 에 유리 합 니 다. 여 기 는 더 이상 군말 하지 않 습 니 다.
웹 서비스 항목 을 새로 만 들 고 추상 적 인 기본 클래스, 실현 클래스, 해석 클래스 를 추가 합 니 다. 완 성 된 화면 은 다음 과 같 습 니 다.
Microsoft. Web. services 네 임 스페이스 에 대한 참조 가 필요 합 니 다.
그 속
PrintBase. cs 는 기본 클래스 입 니 다.
Parser. cs 는 해석 류 입 니 다.
LinePrint. cs 는 구체 적 인 이미 지 를 실현 하 는 클래스 입 니 다.
기본 코드:
	public class PrintBase
	{
		public PrintBase()
		{
			//
			// TODO:            
			//
		}

		public virtual Stream DrawImage()
		{
			return null;
		}
}

분석 클래스 코드:
public class Parser
	{
		public Parser()
		{
			//
			// TODO:            
			//
		}

		public static PrintBase CreateElement(DataSet ds)
		{ 
			PrintBase pb = null;

			string l_strPrintType = ds.Tables["Root"].Rows[0]["PrintType"].ToString();

			switch(l_strPrintType)
			{
				case "line":
					pb = new LinePrint(ds);
					break;
				default:
					pb = new PrintBase();
					break;
			}
			return pb;
		}

}

구현 클래스 의 코드:
이 곳 의 코드 가 비교적 길 기 때문에 저 는 일부 코드 만 붙 여서 참고 할 수 있 습 니 다. 여러분 은 자신의 실제 상황 에 따라 도형 을 그 릴 수 있 습 니 다.
/// <summary>
		///       
		/// </summary>
		/// <returns>  Stream</returns>
		public override Stream DrawImage()
		{
_ChartSize = new SizeF(float.Parse(ds.Tables["Root"].Rows[0]["Width"].ToString()),
				float.Parse(ds.Tables["Root"].Rows[0]["Height"].ToString()));
						
			Bitmap b = new Bitmap((int)_ChartSize.Width,(int)_ChartSize.Height,
				PixelFormat.Format32bppArgb);

			//   
			_Graphics = Graphics.FromImage(b);

			//    ,     
			
			//    
			MemoryStream s = new MemoryStream();
			b.Save(s,ImageFormat.Png);
			return s;
}

저 는 개인 적 으로 DataSet 으로 작은 XML 데 이 터 를 조작 하 는 것 을 좋아 합 니 다. 여러분 은 자신의 취향 에 따라 조정 하 십시오. 여기 서 보 여 주 는 방법 은 웹 서비스 류 에 직접 호출 될 것 입 니 다.
웹 서비스 클래스 의 코드:
	[WebMethod]
		public bool CreateImage(DataSet ds)
		{
			bool l_bStatus = true;

			try
			{
				PrintBase pb = null;

				pb = Parser.CreateElement(ds);

				Stream s = pb.DrawImage();

				SoapContext sc = HttpSoapContext.ResponseContext;

sc.Attachments.Add(new DimeAttachment("image/png",TypeFormatEnum.MediaType,s));

			}
			catch
			{
				l_bStatus = false;
			}

			return l_bStatus;
	}

이로써 우리 서버 의 코드 는 기본적으로 완성 되 었 습 니 다. 다음은 클 라 이언 트 가 해 야 할 일 을 살 펴 보 겠 습 니 다. 저 는 여기 서 WinForm 프로젝트 를 구축 하여 시연 용 으로 사용 하고 실제 운용 에서 노 언 글 에서 언급 한 usercontrol 을 사용 하면 됩 니 다.
클 라 이언 트 코드:
private void button1_Click(object sender, System.EventArgs e)
		{
			DataSet ds = new DataSet();
			ds.ReadXml(Application.StartupPath+@"\test.xml");

			PrintWebService.Proxy.Service proxy = new PrintWebService.Proxy.Service();

			proxy.CreateImage(ds);

			if (proxy.ResponseSoapContext.Attachments.Count != 0)
			{
				b = new Bitmap(proxy.ResponseSoapContext.Attachments[0].Stream);

				this.pictureBox1.Image = b;
			}			
	}

여기 서 저 희 는 DataSet 으로 XML 을 불 러 오고 WebService 를 호출 하여 이미지 Stream 으로 돌아 갑 니 다. 클 라 이언 트 의 작업 이 매우 간단 해 졌 습 니 다. 웹 서 비 스 를 호출 하면 됩 니 다. WSE 는 첨부 파일 에 대한 지원 이 잘 되 고 코드 도 매우 간단 합 니 다.나 는 내 가 만 든 그림 을 테스트 하기 위해 미리 보 기 를 인쇄 하 는 작업 도 했다. 다음 과 같다.
이로써 우 리 는 큰 성 과 를 거 두 었 다.
주의사항:
 웹 서비스 항목 의 웹. config 에 다음 문 구 를 추가 하여 코드 의 정확 한 운행 을 확보 해 야 합 니 다.


dd type="Microsoft.Web.Services.WebServicesExtension,Microsoft.Web.Services,Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
priority="1" group="0"/>


그렇지 않 으 면 웹 서비스 코드 의 SoapContext sc = HttpSoapContext. ResponseContext;sc 는 null 값 을 영원히 되 돌려 줍 니 다.
 비록 나의 테스트 에서 웹 서비스 가 보 여 준 성능 은 상당히 OK 이지 만 실제 운용 에서 친구 들 은 자세히 테스트 해 봐 야 한다.
요약:
위의 설명 을 통 해 여러분 도 똑 같은 경험 을 하 실 것 이 라 고 믿 습 니 다. 그것 은 바로 확장 이 매우 편리 하 다 는 것 입 니 다. 실제 응용 에서 고객 이 인쇄 하 라 고 요구 하 는 데 이 터 는 큰 변화 가 발생 하지 않 을 것 입 니 다. 이런 데 이 터 를 모 으 고 목록 은 복잡 한 요 구 를 가지 고 있 습 니 다. WebService 방식 을 통 해 우 리 는 이러한 변 화 를 서버 에 집중 합 니 다.클 라 이언 트 프로그램의 변경 을 최소 화하 고 서버 측은 더욱 강력 한 제3자 구성 요 소 를 사용 하여 그림 그리 기 기능 을 실현 할 수 있 습 니 다.여러 페이지 인쇄 에 대한 응용 프로그램 은 WSE 가 여러 첨부 파일 의 장점 을 지원 하기 때문에 저 희 는 모든 데 이 터 를 한꺼번에 보 내 서버 에서 해당 하 는 여러 개의 도 표를 생 성하 고 나 누 어 보 낼 수 있 습 니 다.XML 미디어 를 사용 하여 데이터 수집 도 다양 해 졌 기 때문에 A 서버 에서 데 이 터 를 수집 하고 B 서버 에서 인쇄 할 수 있 습 니 다.
글 에서 언급 된 코드 에 대해 필요 한 친구 가 편지 로 나 에 게 요구 할 수 있다 ([email protected]) 글 에서 언급 된 문제 에 대해 컴퓨터 세계 개발 자 클럽 에 오신 것 을 환영 합 니 다 (http://www.dev-club.com) 검토 한다.
참고 자료:
제목: DIME 와 WS - Attachments 알 아 보기
주소:http://www.microsoft.com/china/msdn/library/dnwebsrv/html/DIMEWSAttch.asp
글 제목: 첨부 파일 로 SOAP 메 시 지 를 보 내 는 웹 서비스 개선 사용
주소:
http://msdn.microsoft.com/webservices/building/wse/default.aspx?pull=/library/en-us/dnwebsrv/html/wsedime.asp
도구:
본 논문 에서 제공 하 는 솔 루 션 을 사용 하려 면 마이크로소프트 웹 서비스 Enhancements for Microsoft. NET 1.0 (WSE) 을 다운로드 해 야 합 니 다.
다운로드 주소:http://msdn.microsoft.com/webservices/building/wse/default.aspx
저자: 임 데
저작권 성명
본 사이트 에서 발표 한 글 은 작 가 는 반드시 오리지널 문장 이 라 고 보증 해 야 한다.오리지널 글 이 아니라면, 이 로 인 한 저작권 분쟁 은 작가 스스로 부담 한다.마이크로소프트 는 본 사이트 에서 발표 한 글 을 심사 할 의무 가 있 지만, 당신 은 이 글 들 의 사용 위험 을 고려 해 야 합 니 다.본 사 이 트 는 사용자 가 서로 기술 정 보 를 교환 하고 학습 하 는 정원 만 제공 하고 지역사회 사용자 의 기술 문장 에 어떠한 위험 도 부담 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기