未发布 MailBee.NET Objects发送电子邮件(SMTP)教程五:发送带有嵌入图片的网页和HTML邮件
如果HTML格式的邮件没有任何嵌入对象,开发人员可以使用SMTP.BodyHtmlText属性或SMTP.Message.LoadBodyText方法来设置邮件正文。
SMTP.BodyHtmlText属性允许开发人员直接分配邮件正文,如下所示:
C#: oMailer.BodyHtmlText = @"Test HTML message.
This is a test HTML mes-sage.
www.afterlogic.com"; |
VB.NET: oMailer.BodyHtmlText = "Test HTML message.
" & vbCrLf & _ "" & vbCrLf & _ "" & vbCrLf & _ "This is a test HTML mes-sage." & vbCrLf & _ " " & vbCrLf & _ " " & vbCrLf & _ "www.afterlogic.com" |
也可以使用SMTP.Message.LoadBodyText方法。在这种情况下,开发人员可以从指定的URI中加载消息,如下所示:
C#: oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm", MessageBodyType.Html); |
VB.NET: oMailer.Message.LoadBodyText("http://www.domain.com/index.htm", MessageBodyType.Html) |
或者
C#: oMailer.Message.LoadBodyText(@"C:\Temp\saved_web_page.htm", MessageBodyType.Html); |
VB.NET: oMailer.Message.LoadBodyText("C:\Temp\saved_web_page.htm", MessageBodyType.Html) |
否则,开发人员应该调用SMTP.Message.LoadBodyText方法来编写一个包含嵌入对象(图像,音频或视频)的消息。以下示例将邮件正文加载为默认编码以及指定URI中的所有相关文件:
C#: oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm ", MessageBodyType.Html, Encoding.Default, ImportBodyOptions.ImportRelatedFiles| ImportBodyOptions.ImportRelatedFilesFromUris); |
VB.NET: oMailer.Message.LoadBodyText("http://www.domain.com/index.htm ", _ MessageBodyType.Html, _ Encoding.Default, ImportBodyOptions.ImportRelatedFiles Or _ ImportBodyOptions.ImportRelatedFilesFromUris) |
请注意:在使用SMTP.Message.LoadBodyText方法时,所有相关文件将被添加到邮件中。
代码示例:
该示例从拥有嵌入对象的现有网页中创建新邮件并发送。在使用MailBee.NET Objects之前,请确保它已解锁。
| C#: using System; using System.Text; using MailBee; using MailBee.SmtpMail; using MailBee.Mime; namespace EmailApp { class Class1 { [STAThread] static void Main(string[] args) { Smtp oMailer = new Smtp(); oMailer.To.AddFromString("Bill Smith "); oMailer.From.AsString = "John Doe (Company Info)"; oMailer.Subject = "Test web page"; oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm", MessageBodyType.Html, Encoding.Default, ImportBodyOptions.ImportRelatedFiles | ImportBodyOptions.ImportRelatedFilesFromUris); try { oMailer.Send(); Console.WriteLine("The message has been successfully sent."); } catch (MailBeeSmtpMessageSizeOutOfRangeException e) { Console.WriteLine("The message is too large (more than " + e.MaxAllowedMessageSize + " bytes)."); } } } } |
| VB.NET: Imports System Imports System.Text Imports MailBee Imports MailBee.SmtpMail Imports MailBee.Mime Namespace EmailApp Class Class1 _ Shared Sub Main(ByVal args() As String) Dim oMailer As Smtp = New Smtp() oMailer.To.AddFromString("Bill Smith ") oMailer.From.AsString = "John Doe (Company Info)" oMailer.Subject = "Test web page" oMailer.Message.LoadBodyText("http://www.domain.com/index.htm", MessageBodyType.Html, Encoding.Default, ImportBodyOptions.ImportRelatedFiles | ImportBodyOptions.ImportRelatedFilesFromUris) Try oMailer.Send() Console.WriteLine("The message has been successfully sent.") Catch e As MailBeeSmtpMessageSizeOutOfRangeException Console.WriteLine("The message is too large (more than " + e.MaxAllowedMessageSize + " bytes).") End Try End Sub End Class End Namespace |
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。
未发布 CAD .NET v12发布,提高GDI+可视化速度并可导入AutoCAD®DWG 2018丨附下载
CAD .NET新版本大大提高了GDI+可视化的速度。当加载具有复杂结构的大文件时可以很明确的体验到。例如,包含大量实体的一些文件的可视化速度现在提升了十倍。
更重要的是,CAD .NET现在可以导入最近发布的最新DWG版本的AutoCAD®DWG 2018。
此外,CAD .NET使用非Unicode SHX文本和形状的方式已经大大改善。这种改进对于使用本地非Unicode字体的系统尤其重要,例如德语、法语、希伯来语和其他语言的特殊字符。

CAD .NET 12包含的改进和修复的内容列表:
GDI+可视化速度大大提高
导入AutoCAD®DWG 2018
改进非Unicode SHX文本/形状支持
Bug修复
试用、下载、了解更多产品信息请点击"咨询在线客服"
未发布 Xmanager Enterprise网络通讯工具更新合集 Xmanager Enterprise是完整的网络连接套件,它带有一个高性能PC X服务器,支持OpenGL(GLX)、3d硬件加速、安全终端模拟器、文件传输客户端和LPD打印机服务器。Xmanager Enterprise 4使3d X应用程序运行得更快,通过SSH和TELNET来提供安全的远程终端访问,通过SFTP/FTP进行方便的文件传输,使用LPD在本地打印远程文件等。
Xmanager Enterprise v5.1243更新:
- 修复:[Xmanager]全屏启动时屏幕闪烁
- 修复:[Xshell]自动更新会错误地显示用户正在使用最新版本
- 修复:[Xshell]终端复位时,光标不复位
- 修复:[Xshell]重命名选项卡有时将名称应用于其他选项卡
- 修复:[Xshell]反向视频终端转义序列被忽略
- 修复:[Xshell]当选择新窗口中打开时,将-newtab选项中的新选项卡名称应用于现有选项卡
- 修复:[Xftp]从连接的会话中打开新终端时,系统将提示用户输入密码
- 修复:[Xftp]从会话的上下文菜单中调用Xftp始终默认为TCP 22
- 修复:[Xlpd]资源清理
Xmanager是市场领先的PC X服务器,它能够带来Windows平台下强力的虚拟应用技术。使用Xmanager,能够使安装在远程的基于UNIX系统的X应用程序与一般的Windows应用程序 完全一样。它提供了一个强大的会话管理控制台、易于使用的X应用程序启动器、X服务器概要文件管理工具、SSH模块和用于安全访问的远程高性能PC X服务器及虚拟化的UNIX/Linux
环境。
Xmanager v5.1056更新:
Xshell是一个功能强大的终端模拟器,支持SSH、SFTP、TELNET、RLOGIN和SERIAL。它提供业界领先无法替代的性能和特性集。它有许多对企业用户有用的特性,包括:分页式环境、动态端口转发、自定义键映射、用户定义按钮、VB脚本以及显示2字节字符和支持国际语言的UNICODE终端。
Xshell v5.1333更新:
- 修复:[Xshell]自动更新会错误地显示用户正在使用最新版本
- 修复:[Xshell]终端复位时,光标不复位
- 修复:[Xshell]重命名选项卡有时将名称应用于其他选项卡
- 修复:[Xshell]反向视频终端转义序列被忽略
- 修复:[Xshell]当选择新窗口中打开时,将-newtab选项中的新选项卡名称应用于现有选项卡
Xftp是一个灵活和轻量级的SFTP / FTP客户端,它主要用于为用户提供通过网络安全的传输文件。它提供了许多强大的功能,比如直接编辑、多窗格、文件夹同步、支持FXP、服务器之 间传输以及集成第三方编辑器。在处理远程文件方面Xftp将为你节省时间和精力。 对于家庭和学校的用户来说,Xftp是免费的。具体情况可参阅家庭和学校用户免费使用许可协议条款和
Xftp v5.1229更新:
- 修复:[Xftp]从连接的会话中打开新终端时,系统将提示用户输入密码
- 修复:[Xftp]从会话的上下文菜单中调用Xftp始终默认为TCP 22
Xlpd是一个用于Windows系统的简单的行式打印机后台程序(LDP)和打印作业管理工具。它通过LPD协议从远程服务器接收打印任务并把该打印任务发送至本地打印机。LPD是一个支持多种操作系统的标准的打印协议,支持包括UNIX、Solaris和Linux等系统。
Xlpd v5.1231更新:
未发布 Xamarin for Visual Studio v4.6发布,重新设计属性页和Manifest编辑器 Xamarin for Visual Studio 让开发者可以在Windows上用 Visual Studio 开发原生 iOS, Android 和Windows应用程序。Xamarin for Visual Studio提供了流畅的iOS和Android的API查询,让开发者专注于应用本身。更棒的是,开发者完全可以利用一切他熟悉的开发工具进行开发,从而保证项目的高效性和持续性。 V4.6版本中包含的功能:
属性页和Manifest重新设计
在Xamarin 4.6中,我们重新设计了属性页和Manifest编辑器的重新设计,添加了一个新的编辑器:授权编辑器。
新的授权编辑器
新的编辑器现在是一个独立的编辑器。它的设计方式更加简单有效,双击你的entitlements.plist文件来启动。它的UI非常友好,用户可以轻松浏览和运用。
Bug修复
此版本包括以下问题修复:
iOS设备列表模拟器在更改iOS版本时不会更新。(4.6.0.289)
修复VS在创建主机发现时挂起Zeroconf的问题。(4.6.0.289)
SayGoodbye目标在创建iOS库时失败。(4.6.0.279)
MSBuild过程由于XMA监控而产生较高的CPU使用率。(4.6.0.279)
在某些情况下重新连接后,Mac Agent图标不会更新。(4.6.0.279)
在设置中无法手动选择Xcode路径。(4.6.0.279)
Android存档 - 向用户发出关于所需的密钥库备份的信息,并有助于将其复制到其他位置。(4.6.0.279)
无法在Visual Studio 2017中打开名为“资产”的目录。(4.6.0.279)
VS不会在新的iOS项目的.plist文件中设置MinimumOSVersion键。(4.6.0.279)
“链接器行为”下拉列表显示MtouchLink属性的“Don't Lin”默认值不正确。(4.6.0.279)
在Mac Server连接对话框上显示Xamarin.iOS兼容性错误。(4.6.0.279)
未选择数据源类时,不会禁用支持的系列和并发组。(4.6.0.279)
更改连接流程,以便在打开解决方案自动连接时不显示任何对话框。(4.6.0.279)
将UWP项目设置为启动项目时,设置正确的配置平台。(4.6.0.279)
tvOS绑定项目创建失败并出现多个错误。(4.6.0.279)
在某些情况下,Visual Studio挂起ZeroConf (4.6.0.279)
由于XMA上的进程监视器不正确,MSBuild进程会产生高CPU使用率。(4.6.0.240)
建立iOS库时,SayGoobye目标失败。(4.6.0.240)
本地静态参考(.a)源文件在构建后最终以0 Kb为单位。(4.6.0.240)
Android属性页面上的打字错误。(4.6.0.240)
F#Android项目无法构建。(4.6.0.240)
关于部署WatchOS应用程序的System.IO.FileNotFoundException异常。(4.6.0.240)
几个连接可靠性Mac代理修复。(4.6.0.240)
Android Library模板包含资源文件。(4.6.0.240)
Android项目模板不会生成mipmap图标。(4.6.0.240)
无法在调试模式下解除tvOS扩展应用[电视服务扩展]。设备下拉菜单中没有tvOS模拟器。(4.6.0.240)
Visual Studio崩溃,试图启动没有运行的Android应用程序。(4.6.0.240)
将默认模式下的watchOS设置为默认模拟器。(4.6.0.240)
已知的问题
创建会因错误取消:Project'project_name '需要在你的计算机上安装以下组件:...
构建Android应用程序可能需要安装其他组件。这几种情况下可能需要,例如使用新组件、NuGet软件包,或者是你在计算机上构建的第一个Xamarin.Forms解决方案。
Xamarin for Visual Studio检测到资源的缺失,并显示错误信息,要求下载并安装它们:
双击列表中的错误,开始下载并安装缺少的组件。
请记住,你需要在列表中看到Intellisense错误。
如果你尝试在解决方案中创建任何项目,而不安装缺少的组件,那么创建将被取消。
安装缺少组件的可选方法是从命令行中创建。
其他已知问题
如果你在使用此版本后降级为Xamarin 4.2或更低版本,则需要在Mac Server对话框中重新注册已知的Mac服务器。请使用“忘记Mac”选项,并再次配置服务器连接。
试用、下载、了解更多产品信息请点击"咨询在线客服"
未发布 TWAIN扫描组件Dynamic .NET TWAIN v7.1发布,将图像保存为多页TIFF Dynamic .NET TWAIN是为桌面应用程序设计的.NET控件,适用于C#和VB.NET。这是一个能让你从任何TWAIN设备中(如scanners, digital cameras,等)获取图像的托管代码SDK。拥有精心设计的用户界面以及内置向导模式,Dynamic .NET TWAIN易于使用,只需要几行代码即可完成TWAIN设备相关工作,并且兼容TWAIN Specification V1.9(比如:三图像传输模式等)。高级采样支持保证了Dynamic .NET TWAIN的易用性,低阶功能则使其在即使最为苛刻的应用程序中也能保持灵活性和可控性。
用于.NET应用程序的简单有效的TWAIN扫描组件——Dynamic .NET TWAIN v7.1版本现已可用。
新版本亮点:
Dynamic .NET TWAIN v7.1更新内容
新增
改进
删除未使用的命名空间和类。
降低Webcam模块中视频流的内存消耗。
改进了演示指南程序和示例的界面。
修复
修复了在Webcam模块中设置“变焦值”引发错误的问题。
修复了PDF库中输出PDF的分辨率固定为72 dpi的问题。
修复了在Viewer模块中选择区域时鼠标闪烁的问题。
其他小的修改和调整。
未发布 LEADTOOLS v19更新发布文档和医疗功能,增加Visual Studio 2017兼容性! LEAD Technologies发布了LEADTOOLS v19 SDK的重大更新,本次更新侧重于文档和医疗功能,其中一些功能在商业SDK市场中是前所未有的。包括第一个完整的商业Hanging Protocol SDK解决方案、大图像(以TB为单位)支持、文档格式支持以及更新各种识别技术,包含OCR、表单、OMR、条码、信用卡读卡器和Visual Studio 2017的兼容性。
LEADTOOLS v19 (Windows、Linux、IOS/macOS、Android)下载>>>
LEAD Technologies总裁Rich Little表示:“这次更新是LEAD继续加强LEADTOOLS以解决现实问题的一个很好的例子。我们非常高兴能够拥有第一个商业医疗查看器SDK,包括完整的DICOM Hanging Protocol、优化的大图像加载和一个新的超快速表单识别算法。26年前我和Moe创建LEAD时,我们从来没有想过可以加载1TB的图像。”
以下是一些主要更新内容:
第一个商业性DICOM Hanging Protocol SDK
HTML5 Zero-footprint 医疗Web浏览器 - 新的功能和增强
DICOM存储服务器 - 新功能
更高效地处理DICOM Pixel数据
SDK识别技术 - 增强对OCR、表单 & OMR以及新的复合条形码的识别
文档查看器 - 新的功能和增强
文档格式 - 功能增强
信用卡读卡器SDK - 支持更多平台
未发布 百度正式开源其RPC框架brpc 9月14日,百度正式在GitHub上基于Apache 2.0协议开源了其RPC框架brpc。brpc是一个基于protobuf接口的RPC框架,在百度内部称为“baidu-rpc”,它囊括了百度内部所有RPC协议,并支持多种第三方协议,从目前的性能测试数据来看,brpc的性能领跑于其他同类RPC产品。
brpc开发于2014年,主要使用的语言是C++和Java,是百度内部使用最为广泛的RPC框架,它经受了高并发高负载的生产环境验证,并支撑了百度内部大约75万个同时在线的实例。据了解,百度内部曾有多款RPC框架,甚至在2014年时还开源过另外一款RPC框架sofa-pbrpc。那brpc是在什么样的背景下诞生的?它有什么样的优势?又为何要开源?就这些问题,InfoQ记者采访了brpc负责人戈君。
Q:谈谈brpc的一些基本情况?什么时候开始研发的?经过了怎么样的迭代和升级?目前在内部应用情况如何?
戈君:brpc于2014年创建,在百度内部称为“baidu-rpc”。到目前为止,brpc一共进行了3000次左右的改动,现在仍在持续优化中,百度内的wiki上可以查询到每次改动的描述。brpc的主要语言是C++和Java,对其他语言的支持主要是通过包装C++版本,比如brpc的Python版包含C++版的大部分功能。
brpc目前支撑百度内部大约75万个同时在线的实例(不含client),超过500种服务(去年的统计,现在已不统计这类数据)。Hadoop、Table、Mola(另一种广泛使用的存储)、高性能计算、模型训练、大量的在线检索服务都使用了brpc。brpc第一次统一了百度内分布式系统和业务线的通信框架。
Q:为什么百度当时要研发brpc?
戈君:我们在实践中意识到,RPC作为最基础的通信组件,当时的百度已经不领先了。我当时的经理刘炀曾是Google的工程师,非常重视基础架构的建设,也愿意在这个方向投入资源。
我们在内部会更加深入地讨论这些问题。“好用”有时看起来很主观,但其实还是有据可循的,它的关键点是能不能真正地提高用户的效率:开发、调试、维护都要考虑到,如果用户效率真的被提高了,用户会想着你的,靠吹嘘或政令推广的东西得不了人心。我们创建brpc的初衷是解决百度业务所面临的实际挑战,同时也希望成为百度同学最喜爱的工具,哪怕离开百度也会怀念brpc。我们希望在提供了一个好用框架的同时,也展现了一种工作方法:注释怎么写,日志怎么打,ChangeLog怎么写,版本怎么发布,文档怎么组织,甚至对未来不在百度的同学的工作也有帮助,所以从这点来说brpc从一开始就是拥抱开源的。事实上,我们在口碑上做得还不错,brpc的wiki可能是百度内被点赞最多的内容之一。
Q:与其他的一些开源的RPC框架相比,brpc的优势是什么?
戈君:brpc主打的是深度和易用性。一方面我们没有精力像gRPC那样摊大饼,什么都做。另一方面我们也注意到gRPC(包括更早的Thrift)的深度和易用性并不够。技术方面的东西就是这样,看示例程序,文档非常牛逼,但实战中可能就是另一回事了,为什么各个公司都要造自己的轮子,一个隐藏原因就是表面高大上的东西在一些细节上让你无法忍受。
RPC真正的痛点是什么?是可靠性、易用性和定位问题的便利性。服务中不要出现不可解释的长尾,程序的可变项要尽量少,各种诡异问题要有工具支持快速排查。而这些在目前开源的RPC框架中做的并不好,它们大多看着很牛,但就是无法在自己组织中推广开来。回到前面那三点,brpc是如何做的呢?
- 可靠性。这一方面是代码质量问题,通过为brpc团队设立很高的招聘门槛,以及在团队中深入的技术讨论,我们确保了稳固的代码基础。另一个问题是长尾问题,这是设计问题,brpc其实包含了很多模块,其中的bthread是一个M:N线程库,就是为了更好地提高并发避免阻塞。brpc中的读和写都是wait-free的,这是最高程度的并发。技术细节请点击链接查看。
- 易用性。有种设计是什么选择都做成选项丢给用户,号称功能都有,但一旦出问题,则是用户“配置错了”。而且这样用户还非常依赖开发团队,没有开发团队的支持基本用不了,开发团队有足够的理由扩充团队。这么做其实非常不负责任,用户面对海量的选项也很难受。brpc对于增加选项非常谨慎,框架能自己做判断的绝不扔给用户,所有用户选项都有最合理的默认值,不设也能用。我们认为这对用户体验来说非常重要。
- 定位问题的便利性。这点其它开源框架目前做的都不好,正常使用是可以的,但出问题就麻烦了。这个问题在百度内部其实也很严重,brpc之前用户排查问题都要拉RPC同学一起排查,RPC框架对用户是个黑盒,用户根本不知道里面发生了什么。按我们的经验,基本每天都有几个用户在群里问server卡顿,client超时之类的问题,排查问题是常态,人手必然不够。时间长了用户就觉得你这个框架各种问题,人还拽的不行很少回他们消息。brpc的解决办法是给server内加入各种HTTP接口的内置服务,通过这些服务,用户可以很快看到server的延时、错误、连接、跟踪某个RPC、CPU热点、内存分配、锁竞争等信息,用户还可以使用bvar来自定义各类统计信息,并在百度的运维平台NOAH上汇总。这样大部分问题用户可以自助解决。其实我们去看也是看这些,只是会更加专业。内置服务的具体说明可以看这里。
Q:作为公司内部的RPC框架,在服务治理方面有什么考虑?
戈君:百度内部RPC使用非常广泛,基本都是RPC调用,一些产品线还会通过local RPC隔离工程框架和策略代码。这么多年下来,服务周边的系统也比较全面了:编译是BCLOUD,发布是Agile,服务注册和发现是BNS,认证是Giano,监控和运维是NOAH。在百度内部,brpc和这些系统做了比较紧密的绑定,用户体验是一站式的。虽然在开源版本中,这些结合大都删掉了,但用户可以根据自己组织中的基础设施来进行定制:交互协议,名字服务,负载均衡算法都可以定制。对于其中一些特别通用的,我们希望用户反馈到开源版本中来以方便所有人。
Q:之前百度还开源过sofa-pbrpc,brpc与它的区别是什么?
戈君:sofa-pbrpc也是百度开发的一个比较早期的RPC框架,属于sofa编程框架的一部分,在搜索有应用。brpc相比sofa-pbrpc有如下优点:
- 对协议的抽象更一般化,并统一了全百度的通信架构。bprc能容纳非常多的协议,基于Protobuf的,基于HTTP的,百度内的nshead/mcpack,开源的Redis/Memcached,甚至RTMP/FLV/HLS直播协议,brpc能逐渐地嵌入现有系统,而不需要彻底重构,但sofa-pbrpc则不具备扩展协议的能力。类似的,sofa-pbrpc也无法定制负载均衡算法,brpc默认提供round-robin、随机、一致性哈希,Locality-aware(局部性感知)四种算法,用户还能定制。
- 多线程质量更好。多线程编程是非常困难的,看起来简单的RPC遍布多线程陷阱,比如处理超时的代码可能在RPC还没发出去时就运行了;发送函数还没结束,处理回复的回调就被运行了;一个回复还在被处理另一个回复回来了,诸如此类。另外,一个异步RPC的回调里发起一个同步RPC会发生什么,带着锁做同步RPC会发生什么。这些问题我们都不能在sofa-pbrpc中找到满意的答案。
- 完备的调试和运维支持。解决这个问题的本质还在可扩展性,你如何让用户参与进来定制他们感兴趣的指标,为此我们设计了bvar,让用户能用比原子变量代价还小的方式自由地定制各种指标,用户能在浏览器上看到指标的变化曲线,或在运维平台NOAH看到汇总的监控数据。brpc还加入了大量内置服务方便用户调试程序,查看连接,在线修改gflags,追踪RPC,分析CPU热点,内存分配,锁竞争等一应俱全。
无需讳言,brpc在诞生之初和sofa-pbrpc在百度内部是有竞争关系的,但就像其他地方一样,这种竞争带来了活力。类似的,brpc和其他已经开源的RPC框架也是良性的竞争关系,在比拼谁能真正提高用户效率的过程中共同进步。每个用户都可以去对比代码、文档质量,接口设计,易用程度,扩展能力等,投出自己的一票。
Q:谈谈brpc的整体架构?
戈君:技术栈无外乎是从传输层垒到应用层,就略过不讲了,具体可以去看下开源出来的文档。brpc在架构上强调“在不牺牲易用性的前提下增强可扩展性”,比如brpc支持非常多的协议,在百度内部一个brpc server同端口可以支持二十几种协议,这对于服务的平滑迁移就非常好用。
Client端的协议也非常多,用户用brpc和bthread用得很爽,所以希望我们最好能统一所有的客户端,像对Redis和Memcached的客户端支持也是在这个背景下做的,这两个客户端比官方Client好用多了,感兴趣的读者可以去尝试一下。但这么多协议的配置非常简单,填个字符串就行了,比如HTTP就是把ChannelOptions.protocol设为“http”,Redis就是“redis”。Server端甚至不用设,它会自动判断每个client的协议,怎么做到的开源文档里也有。
名字服务、负载均衡也都可以定制。但为了对用户负责,我们也不鼓励“太自由”的定制,比如一点点需求的变化就要搞个新的,这时更需要想清楚本质区别是什么。这个事情我们在百度内的支持群里每天都在做,我们是开放的”乙方”,但我们也是严厉的”乙方”。
Q:brpc的性能如何?这么高的性能是怎么做到的?
戈君:性能是我们非常看中的一点,它和用户体验也是紧密联系的。好用但性能不行,或不好用但性能很牛,用户会很难受,我们不希望用户纠结。从另一个角度来看,在推广初期,我们要说服产品线用brpc靠什么?最直观的就是性能提升。而且这儿的性能不能停留在benchmark的图片上,而是能在真实应用中体现出来。开放出来的案例文档中或多或少都包含了性能提升,具体如下:
- 百度地图API入口
- 联盟DSP
- ELF学习框架
- 云平台代理服务
Q:为什么要将brpc开源?接下来在开源项目的迭代方面有什么计划吗?
戈君:因为马上还有不少依赖RPC的百度系统要开源啊。RPC作为最基础的组件,开源不仅仅是为了自身,也是为其它开源项目铺路,比如说我们马上还会开源基于brpc的RAFT库,搭建高可用分布式系统非常方便;以及使用brpc的bigflow,让流式计算变得很顺手。这些年百度对开源的认识也在不断加深,开源看似曝光了百度的核心技术,但带来的生态影响力更重要。从Apollo、PaddlePaddle开始,百度真的开始拥抱开源了。brpc的开源版和内部版很接近,只是去掉了对百度内部独有的一些基础设施的支持,我们在内网写的深入分析RPC技术细节的文档也都一并开源了,后续也会及时推送改动,请大家放心。这是一个活项目,不会拉个开源分支就不管了。
查看更多资讯>>>
未发布 Edraw Office Viewer component教程(一):将Microsoft Word嵌入VB.NET并使之自动化
在VB.Net应用程序中嵌入word文档的最佳方法是什么?相信大多数人都记得OLE技术,它可以将Excel图表嵌入到Word文档中。使用Office XP Primary Interpol Assemblies或嵌入WebBrowser控件并导航到相应的Office文档等。但是所有这些技术都不支持完整的Microsoft Word功能。也有很多已知的错误。
本文将逐步介绍如何使用Edraw office viewer component在VB.NET应用程序中嵌入MS Word文件。如果你没有officeviewer.ocx文件,请先安装。
打开Visual Studio并创建一个新的VB.NET应用程序。
右键单击HostOffice解决方案。然后单击“Add Reference...”的选项。
在弹出的对话框中,从浏览选项卡中选择officeviewer.ocx文件。
或从COM选项卡中选择Edraw Office Viewer Component。
单击确定。Edraw Office Viewer Component引用此时已添加到新的vb.net项目中。
切换到Form1的Form设计窗口。
将Edraw Office Viewer Component从“工具箱”面板拖到form1中。
添加以下VB.NET代码来新建、打开、保存、关闭并打印一个word文档,如下所示:
Public Class Form1 Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click If Dialog1.ShowDialog() Then If Dialog1.GetChooseType() = 1 Then AxEDOffice1.CreateNew("Word.Application") ElseIf Dialog1.GetChooseType() = 2 Then AxEDOffice1.CreateNew("Excel.Application") ElseIf Dialog1.GetChooseType() = 3 Then AxEDOffice1.CreateNew("PowerPoint.Application") ElseIf Dialog1.GetChooseType() = 4 Then AxEDOffice1.CreateNew("Visio.Application") ElseIf Dialog1.GetChooseType() = 5 Then AxEDOffice1.CreateNew("MSProject.Application") End If End If End Sub Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click AxEDOffice1.OpenFileDialog() End Sub Private Sub btnSaveAs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveAs.Click AxEDOffice1.SaveFileDialog() End Sub Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click AxEDOffice1.CloseDoc() End Sub Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click AxEDOffice1.PrintDialog() End Sub Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click AxEDOffice1.PrintPreview() End Sub Private Sub btnToolbars_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnToolbars.Click If AxEDOffice1.Toolbars = True Then AxEDOffice1.Toolbars = False Else AxEDOffice1.Toolbars = True End If End Sub Private Sub btnAbout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbout.Click AxEDOffice1.AboutBox() End Sub End Class |
打开配置管理器。将Active解决方案平台更改为x86选项。
然后创建VB.NET项目并开始运行。

The office viewer component支持MS Word 97、Word 2000、Word 2003、Word 2007、Word 2010。它可以在Windows 2000/Xp/Vista/2008/7的32位或64位操作系统上运行。将MS Excel或PowerPoint、Visio、Project嵌入到VB.NET应用程序中,只需要改变Open方法的第二个参数。如下所示:public void Open() { axEDOffice1.Open(sPath,“Excel.Application”); axEDOffice1.Open(sPath,“PowerPoint.Application”); axEDOffice1.Open(sPath,“Visio.Application”); axEDOffice1.Open(sPath,“MSProject.Application”); } |
有了word组件,在Visual Basic应用程序中使用COM实现Word自动化就会变得十分简单。从解决方案资源管理器引用中为Word Object Library 11.0添加引用。在这里我所用Word 2003,所以对象库的版本是11.0。
下面的示例代码显示了如何构建一个最小的文档,插入一个书签,并且在随后用文本更换空书签。
Imports Microsoft.Office.Interop.Word Private Sub Automating_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handle Automating.Click Dim word = AxEDOffice1.GetApplication() word.Visible = True Dim doc As Document = AxEDOffice1.ActiveDocument() Dim range As Range = doc.Range range.InsertAfter(“Range1”+ vbCrLf) range.Collapse(WdCollapseDirection.wdCollapseEnd) doc.Bookmarks.Add(“MijnBookmark”,range) range.InsertAfter(“Range2”+ vbCrLf) Dim bookmark As Bookmark = doc。书签(1) range = bookmark.Range range.Text =“Bookmark”+ vbCrLf range.Font.Color = WdColor.wdColorBlue End Sub |
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。