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
저자: 임 데
저작권 성명
본 사이트 에서 발표 한 글 은 작 가 는 반드시 오리지널 문장 이 라 고 보증 해 야 한다.오리지널 글 이 아니라면, 이 로 인 한 저작권 분쟁 은 작가 스스로 부담 한다.마이크로소프트 는 본 사이트 에서 발표 한 글 을 심사 할 의무 가 있 지만, 당신 은 이 글 들 의 사용 위험 을 고려 해 야 합 니 다.본 사 이 트 는 사용자 가 서로 기술 정 보 를 교환 하고 학습 하 는 정원 만 제공 하고 지역사회 사용자 의 기술 문장 에 어떠한 위험 도 부담 하지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java가 클라이언트를 통해 서버 웹 서비스에 접근하는 방법본고는 자바가 클라이언트를 통해 서버 웹 서비스에 접근하는 방법을 실례로 설명한다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다. 자바 관련 내용에 관심이 있는 더 많은 독자들은 본 사이트의 주제를 볼 수 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.