配置浏览器以使用WPF XBAP网络应用程序

写在前面
本文涉及对计算机安全设置的修改,不当操作可能会对计算机带来安全隐患,请操作之前认真了解相关内容,并且在您确定目标应用程序是安全的前提下进行操作。
本文中的一些知识来自其他作者分享的文章,列出如下:
Hanselman:《Firefox, WPF andXBAP》http://www.hanselman.com/blog/FirefoxWPFAndXBAP.aspx
Ouch:《使用IE9、FireFox与Chrome浏览WPF BrowserApplication(.XBAP)的方式》http://www.dotblogs.com.tw/ouch1978/archive/2011/03/16/wpf-view-xbap-in-browsers.aspx
冰戈:《WPF的XBAP文件也能在Firefox中查看》http://www.cnblogs.com/Hedonister/archive/2006/11/24/571235.html

WPF XBAP网络应用程序
WPF应用程序是运行在微软.NET Framework上的应用程序,它可以被部署到网络浏览器上运行,文件以打包形式发布并由客户端计算机的WPF主机加载程序进行加载和运行,即XAML浏览器应用程序(XBAP)。
为能够运行发布在网络上的WPF应用程序,必须安装相应版本的.NET Framework。

想要了解更多关于WPF浏览器应用程序的信息,可参考:
关于WPF:http://zh.wikipedia.org/wiki/Windows_Presentation_Foundation
关于XBAP:http://zh.wikipedia.org/wiki/XAML_Browser_Application或 http://www.xbap.org
关于.NET Framework:http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
其他参考页面:
http://msdn.microsoft.com/zh-cn/library/cc716877(v=vs.110).aspx
http://social.msdn.microsoft.com/Forums/zh-CN/747c6b78-a821-4498-a37f-1b79197de803/xbap-plugin-for-firefox-in-windows-7?forum=wpf
http://stackoverflow.com/questions/17443883/firefox-v22-0-wont-download-and-display-xbap-anymore

正常运行的WPF网络程序加载时如图所示:

浏览器对WPF XBAP程序进行加载,需要调用相应的WPF插件并进行安全设置。对于微软自家产品,IE对XBAP程序的支持最好,因此推荐使用IE浏览器运行此程序;火狐浏览器和Chrome浏览器据说也可以运行XBAP,但笔者只尝试使用了火狐浏览器,并且没有成功。下面首先介绍站点信任和权限内容,随后分别针对IE和火狐(Firefox)浏览器的设置进行简要说明。

信任权限
在计算机程序在运行时,操作系统会为其分配一定的权限,使程序在有限的资源(内存、本地硬盘、注册表等)范围内进行操作,以防止意外或恶意代码破坏系统或造成其他危害。
运行WPF XBAP程序和本地程序相似,由于可访问计算机资源,往往需要较高的权限级别,因此必须“信任”其来源后,程序才能正常运行,否则可能发生.xbap文件不加载(WPF宿主不会启动,而是由浏览器对.xbap进行处理,提示打开或保存),或加载程序运行时发生权限错误。

为使WPF XBAP程序获得“完全信任权限”,有两种情况:

能够获得证书的情况
站点证书是站点可信性的保证,一般来说,证书由互联网上的权威证书签发机构颁发,使用权威机构自身的证书(根证书)对站点证书进行签名加密。
信任一个证书,意味着对持有该证书和该证书签名的其他数字证书的安全网站或程序的信任,也就意味着允许这些网站对信息的传输,或代码在计算机上的运行。
对于XBAP程序,其部署信息(ClickOnce清单)可能被一个包含私钥的个人信息交换文件(.pfx)签名,而这样的一个私钥往往有与之对应的公钥,且包含在证书文件(.cer)里。
所以在浏览器中添加对这个证书的信任后,运行对应的XBAP程序时就具有完全信任权限了。
对于一个在CA认证机构注册的有效证书,一般是不需要手动添加信任的;但若证书或其根证书尚未得到信任,则要手动添加证书(或根证书)到计算机。
在Windows中添加一个证书,打开Internet选项,转到“内容”选项卡,在“证书”栏中点击“证书”,弹开证书对话框。根据需要,分别在“中级证书颁发机构”、“受信任的根证书颁发机构”、“受信任的发布者”3个分页中导入证书。点击“导入”按钮启动证书导入向导,按照向导提示进行操作。

 

一般网站
若XBAP程序没有进行ClickOnce清单签名、或无法获取相应证书文件,则要运行程序,就必须信任其来源(站点地址)。
操作系统依据访问系统资源的级别和范围,将操作者来源分为几个区域。在Internet选项的“安全”选项卡中,可以看到这些可配置的区域。

在“将该网站添加到区域”文本框中输入站点地址,并点击“添加”。若站点不是SSL站点,则注意不要勾选下方的“对该区域中的所有站点要求服务器验证(https:)”选项。
虽然添加了站点信任,首次运行XBAP程序时,系统仍会发出安全警告,询问是否确定要运行。

若相信程序是安全的,则点击“运行”,程序开始执行,且之后的执行将不再提示安全警告。

IE浏览器设置
IE浏览器提供原生技术支持,因此无需安装额外插件,但要运行WPF XBAP程序,必须设置浏览器安全配置并为其赋予合适的权限。
若浏览器禁用了XAML应用程序,程序加载后将提示“此应用程序类型已禁用”的错误:

启用XBAP应用程序,打开IE浏览器的Internet选项,进入到“安全”选项卡,在安全区域中选择“Internet”,之后点击“该区域的安全级别”框中的“自定义级别”。在弹开的“安全设置-Internet区域”对话框中,设置“XAML浏览器应用程序”为“启用”。

注意,若“受信任的站点”域安全设置中的相应项被禁用,则也需要进行设置。

Firefox浏览器设置
网络上关于使用Firefox运行XBAP的帖子时间都比较久了,但介绍的方法都基于微软提供的解决方案:
在Firefox中运行WPF XBAP程序需要安装插件,但该插件无法从网络单独获取,它被集成到.NET Framework 3.5 SP1中。要获取插件:可在安装Firefox后安装.NET Framework 3.5 SP1,插件将自动安装到浏览器中;若安装顺序相反,则可选择重装.NET Framework 3.5 SP1,但更聪明的方法是在C:\Windows\Microsoft.NET\Framework\v3.5\Windows PresentationFoundation\NPWPF.dll位置复制到Firefox的插件文件夹中。
解决方法没有提到证书的问题,这是需要特殊留意的,因为火狐浏览器拥有自己的证书存储区(独立于IE,可在火狐浏览器的设置选项中找到,导入证书的方法和IE类似)。
很遗憾地,根据网上一些资料显示,在Firefox 22版本之后该插件已无法正常工作(笔者动笔时火狐浏览器版本号已是31.0),较古老的火狐浏览器可能会工作,但笔者没有测试(这种测试几乎是无意义的,对于不支持HTML5等网络新技术的浏览器,其使用者已经微乎其微)。
一个变通方法是在Firefox中安装IE Tab插件以集成IE内核,并以IE内核方式浏览XBAP程序页面,此时设置方法与在IE中相同。
关于Firefox WPF加载项:http://msdn.microsoft.com/zh-cn/library/cc716877%28v=vs.100%29.aspx

ArcGIS 10.1 BUG记录

声明:笔者使用ARCGIS 10.1 XXX版,YYY版可能没有此处描写的问题

 

1. 关于注册数据库

发布启用FA的服务,需要为数据库进行ArcGIS Server注册,若通过ArcMap执行注册,会发现无法注册成功,Analize不能通过。此情况下,应找到企业数据库的链接位置,一般在

C:Users{yourname}AppDataRoamingESRIDesktop10.1ArcCatalog{yoursdedatabase}.sde

具体位置可能由于个人设置而不同,可通过在ArcCatalog中右键点击链接,查看其属性的General页。

通过Server Manager的 “站点 -> 数据存储” 页面注册数据库:

在数据库注册对话框中,选择本地.sde链接文件

注册验证成功后,数据库名前显示绿色对号

若此方法不成功,请检查server manager的系统权限。

 

2. 数据库域 (domain) 定义问题

在为数据库进行域的定义时,ArcMap的Bug可能会导致大量的时间浪费在反复敲击Coded Value内容上。这个问题是新的域记录和属于该域的CodedValue不能同时定义,必须先定义域记录及其属性,提交生效后再次打开域属性页定义CodedValue。

另外需要注意,域属性一旦定义无法更改,必须删除该域后新建,这要求我们定义域的时候一定要认真考虑,否则定义好的Coded Values也要重新定义一遍。

Feature Access

在ArcGIS Server中发布支持Feature Access地图服务,你需要知道的几点:

  1. 所绘制的mxd地图文件中包含的数据,必须来自企业级数据库链接;
  2. mxd中包含的所有图层的数据,必须来自同一数据库链接;
  3. 该企业级数据库必须在ArcGIS Server上进行注册
  4. ArcGIS Server账号应至少具有对该数据库的只读权限,若要实现客户端要素编辑,则应具有完全访问权限
  5. 发布服务时不要忘记勾选Feature Access。

就这么几点^_^。