积极答复者
请问如何部署一个WPF浏览器程序

问题
答案
-
你好 zhao studio,
欢迎你来MSDN中文论坛,很高兴你能够学习和使用WPF技术,希望我的支持能够为你解决些疑惑!
关于你这个问题,“如何部署一个WPF浏览器程序”,在回答这个问题前,我想做一些铺垫,主要是想理清楚关于WPF浏览器程序的特性,和怎么去发布。
我们都知道,WPF浏览器程序,不同于WPF应用程序。后者一般是用于开发桌面应用,主要使用Window类等来构建一些Windows窗体,在其中实现需求所定义的功能;而前者是使用浏览器这一工具,在浏览器中加载并且实现一些和WPF应用程序相类似的功能。我们会一般的把WPF浏览器程序叫做XBAP程序,(XAML Browser Application, 对应编译后的文件格式是.xbap),这些.xbap文件才是我们真正WPF浏览器程序。一个XBAP如何去发布,我想你也应该有所了解,XBAP是使用微软的 ClickOnce 技术来进行发布,服务提供一个xbap文件,然后通过浏览器(目前支持IE系列,FireFox需要插件才可以支持WPF 3.5的XBAP,其他浏览器暂不支持)下载到本地 ClickOnce 缓存,然后会在本地运行。所以从这个层面上说,一个XBAP程序其实还算是个本地的应用程序。
他和Silverlight 相比,正如wpfsilverlight所说,运行环境上是有区别的。XBAP在运行时始终会通过一个叫做 PresentationHost.exe 的程序运行,我们可以在打开xbap程序时发现,任务管理器中会有一个 PresentationHost.exe 进程在运行,这个进程负责加载和运行xbap。详细可以参看文档:http://msdn.microsoft.com/zh-cn/library/aa970051.aspx
XBAP和Silverlight还有一项很大的区别,就是XBAP几乎可以使用所有WPF有的特性和功能,但Silverlight就不可以,因为即使SL和WPF有4分相似,但他们毕竟还是相互独立的技术,使用相互独立的类库,并且面向的技术点不同;一个是桌面应用,另一个是网络应用。由于网络的关系所以他对于安全性方面会有更多的考虑。说到安全性,对于XBAP程序也是有定义的,毕竟XBAP程序主要是要靠网络进行发布,最终在客户端浏览器中运行,在默认情况下,XBAP的开发会被限定为部分授信,但这个我们是可以改变的,可以把它设置为全授信 (Full-trust),这一概念,我们要好好阅读下他的相关文档:http://msdn.microsoft.com/zh-cn/library/aa970060.aspx 和 http://msdn.microsoft.com/zh-cn/library/aa970910.aspx
下面还有些第三方的博客,可能对你去理解也有帮助:
- http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx
- http://scorbs.com/2007/01/10/xbap-trust-levels/
- http://whitepapers.techrepublic.com.com/abstract.aspx?docid=1295323
好前面做点简单介绍和铺垫,下面开始说点正题,如何部署一个XBAP程序。关于这点在MSDN有一个系列是详细来讲的,我先把链接分享出来:http://msdn.microsoft.com/zh-cn/library/ms746651.aspx 里面分开讲了如何生成XBAP和如何部署XBAP,并且有针对性的对于IIS讲了具体步骤(http://msdn.microsoft.com/zh-cn/library/ms752346.aspx)。我这里想对于完全信任的XBAP程序的部署多讲点,毕竟我们可能会做的XBAP是完全信任的可能性大一点.
说到完全信任,我们就不得不提签名认证,具体关于什么签名认证,我们可以去搜索下,据体含义不再解释。一个完整的签名认证,会随着你的XBAP发布出去,当一个客户端请求了并且要运行你的XBAP程序时,他需要检查客户端的证书,检查是否这个客户端浏览是通过认证的,也就是说是通过这个XBAP开发者许可的,或者是这个客户端的使用者知道并且是许可这个浏览器程序来访问他自己的本地资源的,这个时候一个完全信任程序才可能被成功的运行。之余怎么去加这个证书,上面关于完全信任的几个链接已经有介绍了,特别是那几篇老外的文章,有的还配了图例,比较形象。
当一个证书被成功安装到客户端浏览器后,我们就可以来让浏览器去浏览XBAP了,这个时候ClickOnce就会去启动下载数据,然后做校验,认证,最后运行。在服务器端,我们主要是要做一个MIME的配置,需要将我们的扩展名为 .xbap的信息写入你的站点配置 -- .xbap application/x-ms-xbap。http://msdn.microsoft.com/zh-cn/library/ms752346.aspx 文档还具体些到了VBScript自动加本配置的案例,你也可以参考下。
---------------------------------
最后我想说下关于一个XBAP程序设计的个人感受,虽然XBAP和SL有很大区别,但他还是可以像Web程序一样在浏览器运行,兼容性好,而且发布简单。如果按照我的理念的话,一个好的XBAP程序不应该是单单一个XBAP程序,我觉得我们可以增加一个宿主的ASP.Net程序,或者简单的一个HTML静态的页面程序 (其实其他脚本语言的Web程序都可以用来做宿主)。在这些宿主中,我们可以用iFrame来嵌套 XBAP程序,这样一方面有了Web程序的扩展兼容性,又有了XBAP的那种特效效果。如果一个XBAP程序想要和宿主页面交互的话,目前WPF4中已经提供了解决方案,通过BrowserInteropHelper.HostScript属性来实现,这里有篇WPF4新特性的WPF产品组的博客,做了详细的介绍,你可以参考:http://blogs.msdn.com/b/llobo/archive/2009/11/03/new-wpf-features-script-interop-in-xbap.aspx?wa=wsignin1.0 我曾经也写过一个例子,也许对你有用:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2010/20100802%5E_XBAPRunsTheScriptInHostedPage.zip
----------------------------------
说了这些,还有一些连接,希望对你理解XBAP和部署WPF浏览器应用程序有用。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 Sheldon _XiaoModerator 2010年12月20日 14:55
- 已标记为答案 zhao studio 2010年12月22日 1:08
全部回复
-
你好 zhao studio,
欢迎你来MSDN中文论坛,很高兴你能够学习和使用WPF技术,希望我的支持能够为你解决些疑惑!
关于你这个问题,“如何部署一个WPF浏览器程序”,在回答这个问题前,我想做一些铺垫,主要是想理清楚关于WPF浏览器程序的特性,和怎么去发布。
我们都知道,WPF浏览器程序,不同于WPF应用程序。后者一般是用于开发桌面应用,主要使用Window类等来构建一些Windows窗体,在其中实现需求所定义的功能;而前者是使用浏览器这一工具,在浏览器中加载并且实现一些和WPF应用程序相类似的功能。我们会一般的把WPF浏览器程序叫做XBAP程序,(XAML Browser Application, 对应编译后的文件格式是.xbap),这些.xbap文件才是我们真正WPF浏览器程序。一个XBAP如何去发布,我想你也应该有所了解,XBAP是使用微软的 ClickOnce 技术来进行发布,服务提供一个xbap文件,然后通过浏览器(目前支持IE系列,FireFox需要插件才可以支持WPF 3.5的XBAP,其他浏览器暂不支持)下载到本地 ClickOnce 缓存,然后会在本地运行。所以从这个层面上说,一个XBAP程序其实还算是个本地的应用程序。
他和Silverlight 相比,正如wpfsilverlight所说,运行环境上是有区别的。XBAP在运行时始终会通过一个叫做 PresentationHost.exe 的程序运行,我们可以在打开xbap程序时发现,任务管理器中会有一个 PresentationHost.exe 进程在运行,这个进程负责加载和运行xbap。详细可以参看文档:http://msdn.microsoft.com/zh-cn/library/aa970051.aspx
XBAP和Silverlight还有一项很大的区别,就是XBAP几乎可以使用所有WPF有的特性和功能,但Silverlight就不可以,因为即使SL和WPF有4分相似,但他们毕竟还是相互独立的技术,使用相互独立的类库,并且面向的技术点不同;一个是桌面应用,另一个是网络应用。由于网络的关系所以他对于安全性方面会有更多的考虑。说到安全性,对于XBAP程序也是有定义的,毕竟XBAP程序主要是要靠网络进行发布,最终在客户端浏览器中运行,在默认情况下,XBAP的开发会被限定为部分授信,但这个我们是可以改变的,可以把它设置为全授信 (Full-trust),这一概念,我们要好好阅读下他的相关文档:http://msdn.microsoft.com/zh-cn/library/aa970060.aspx 和 http://msdn.microsoft.com/zh-cn/library/aa970910.aspx
下面还有些第三方的博客,可能对你去理解也有帮助:
- http://blogs.microsoft.co.il/blogs/maxim/archive/2008/03/05/wpf-xbap-as-full-trust-application.aspx
- http://scorbs.com/2007/01/10/xbap-trust-levels/
- http://whitepapers.techrepublic.com.com/abstract.aspx?docid=1295323
好前面做点简单介绍和铺垫,下面开始说点正题,如何部署一个XBAP程序。关于这点在MSDN有一个系列是详细来讲的,我先把链接分享出来:http://msdn.microsoft.com/zh-cn/library/ms746651.aspx 里面分开讲了如何生成XBAP和如何部署XBAP,并且有针对性的对于IIS讲了具体步骤(http://msdn.microsoft.com/zh-cn/library/ms752346.aspx)。我这里想对于完全信任的XBAP程序的部署多讲点,毕竟我们可能会做的XBAP是完全信任的可能性大一点.
说到完全信任,我们就不得不提签名认证,具体关于什么签名认证,我们可以去搜索下,据体含义不再解释。一个完整的签名认证,会随着你的XBAP发布出去,当一个客户端请求了并且要运行你的XBAP程序时,他需要检查客户端的证书,检查是否这个客户端浏览是通过认证的,也就是说是通过这个XBAP开发者许可的,或者是这个客户端的使用者知道并且是许可这个浏览器程序来访问他自己的本地资源的,这个时候一个完全信任程序才可能被成功的运行。之余怎么去加这个证书,上面关于完全信任的几个链接已经有介绍了,特别是那几篇老外的文章,有的还配了图例,比较形象。
当一个证书被成功安装到客户端浏览器后,我们就可以来让浏览器去浏览XBAP了,这个时候ClickOnce就会去启动下载数据,然后做校验,认证,最后运行。在服务器端,我们主要是要做一个MIME的配置,需要将我们的扩展名为 .xbap的信息写入你的站点配置 -- .xbap application/x-ms-xbap。http://msdn.microsoft.com/zh-cn/library/ms752346.aspx 文档还具体些到了VBScript自动加本配置的案例,你也可以参考下。
---------------------------------
最后我想说下关于一个XBAP程序设计的个人感受,虽然XBAP和SL有很大区别,但他还是可以像Web程序一样在浏览器运行,兼容性好,而且发布简单。如果按照我的理念的话,一个好的XBAP程序不应该是单单一个XBAP程序,我觉得我们可以增加一个宿主的ASP.Net程序,或者简单的一个HTML静态的页面程序 (其实其他脚本语言的Web程序都可以用来做宿主)。在这些宿主中,我们可以用iFrame来嵌套 XBAP程序,这样一方面有了Web程序的扩展兼容性,又有了XBAP的那种特效效果。如果一个XBAP程序想要和宿主页面交互的话,目前WPF4中已经提供了解决方案,通过BrowserInteropHelper.HostScript属性来实现,这里有篇WPF4新特性的WPF产品组的博客,做了详细的介绍,你可以参考:http://blogs.msdn.com/b/llobo/archive/2009/11/03/new-wpf-features-script-interop-in-xbap.aspx?wa=wsignin1.0 我曾经也写过一个例子,也许对你有用:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2010/20100802%5E_XBAPRunsTheScriptInHostedPage.zip
----------------------------------
说了这些,还有一些连接,希望对你理解XBAP和部署WPF浏览器应用程序有用。
Sincerely,
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 Sheldon _XiaoModerator 2010年12月20日 14:55
- 已标记为答案 zhao studio 2010年12月22日 1:08