基于WCF的Web打印


需求是这样的:

------------------------

为某电子商务公司的物流和快递业务服务。该公司原先一直采用直接打印Web页面的方式打印各种物流环节所需单据,但这种方式饱受浏览器各种不稳定和不兼容因素的困扰,因此需要开发一款基于桌面的自动打印工具。

PHP的网站系统传递相关参数调用打印服务器端进行打印,打印服务器端可在本地进行模板编辑,并进行打印配置。

PHP网站传递(打印数据ID,打印模板ID),打印服务器端依据预存的打印模板及ID,以及依据通过打印数据id获取的第三方数据配合进行打印。

这里我主要使用WCF建立自宿主进行打印服务器,原因如下:公司并不确定打印服务器是否有IIS部署,可能是Linux等系统。自宿主启动后可减少部署的麻烦。

-------------------------------

下面看程序:

TicketPrintServer.Host.WinForm(项目,宿主程序)。

TicketPrintServer.Service(打印接口与实现)

打印接口:

namespace TicketPrintServer.Service
{
[ServiceContract]
public interface IPrintTaskService
{

[OperationContract ]

[WebGet(UriTemplate = "/")]
ArrayList CreateNoTicketPrintTask();

[OperationContract]
[WebGet(UriTemplate = "/print?ticketTypeName={ticketTypeName}&ticketId={ticketId}")]
ArrayList CreateSingleTicketPrintTask(String ticketTypeName, string ticketId);
}
}

宿主程序 Form1:

 

namespace TicketPrintServer.Host.WinForm
{
public partial class Form1 : Form
{
private WebServiceHost host = null;
private delegate void fooDelegateion(string message);

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.ServiceRun();
}

private void ServiceRun()
{
Type serviceType = typeof(TicketPrintServer.Service.PrintTaskService);
string httpBaseAddress = ConfigurationManager.AppSettings["HTTPBaseAddress"];
Uri[] baseAddress = new Uri[] { new Uri(httpBaseAddress) };

host = new WebServiceHost(serviceType, baseAddress);

host.Open();

TicketPrintServer.Service.PrintTaskService.OnCreateSingleTicketPrintTask +=
new Service.PrintTaskService.InvokeCreateSingleTicketPrintTask(this.EchoCreateSingleTicketPrintTask);
}

private void EchoCreateSingleTicketPrintTask(String ticketTypeName, string ticketId, UInt32 retCode, string message)
{
}
///<summary>
/// 依据id编号获取相关数据
///</summary>
///<param name="ticketId"></param>
private string GetContentStrById(string ticketId)
{

}

private void ShowMessage(string message)
{
if (this.InvokeRequired)
{
this.Invoke(new fooDelegateion(ShowMessage), message);
}
else
{
this.textBoxEcho.AppendText(string.Format("[{0}] {1}\n", DateTime.Now.ToLongTimeString(), message));
this.textBoxEcho.ScrollToCaret();
}
}

///<summary>
/// 使用程序进行打印
///</summary>
private void fixPrint(string tempName, string contentStr)
{
}
}

 

转载于:https://www.cnblogs.com/younkey/archive/2011/11/02/2232861.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值