基于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)
{
}
}
}
专注于用户体验,专注于将html5,css,与Android等新技术付诸实践。