IIS 5.1IIS 6.0Visual C++ 7.1IISWindows 2003WebFormsWindows 2000Windows XPIntermediateDevVisual StudioWindowsC++.NETASP.NETC#
基于“零触摸”部署的智能客户端应用程序






2.25/5 (4投票s)
2006 年 6 月 22 日
4分钟阅读

21753

330
基于零接触部署的智能客户端应用程序。这种类型的应用程序可在 Internet 区域提供非常丰富的 GUI。
引言
基于零接触部署的智能客户端应用程序。
- 为智能客户端应用程序安装和配置 Web 服务和网站
- 解压并将这两个文件夹复制到您计算机的 wwwroot 文件夹或您方便的任何其他文件夹。
- 运行输入 intemgr(或打开 Internet Information Services Manager)。展开直到默认网站。为两个网站(Smart client)和 Web 服务创建虚拟目录。
- 确保 Smartclient.aspx 已添加到文档选项卡。
- 打开“目录安全性”选项卡,单击“匿名访问和身份验证控制”,然后单击“编辑”按钮,确保选中了“匿名访问”复选框。
- 单击此窗体上的“确定”和父窗体上的“确定”,然后关闭它。
- 对 Web 服务执行相同的配置设置。
- 网站虚拟目录属性更改以允许 exe 执行
- 再次打开 Internet Information Services Manager(运行 inetmgr)。
- 单击网站的虚拟目录(不是 Web 服务)。
- 查看虚拟目录的属性。
- 在“目录”选项卡上单击“配置”按钮。
- 单击“添加”按钮,并为 .exe 扩展名添加 dll 引用 C:\your windows folder \Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll。
- 单击所有窗口上的“确定”,现在可以从该站点执行 exe 了。
- 配置处理程序项目并将处理程序添加到网站
- 打开 ConfigHandler.zip 中的项目并构建它,以生成一个名为 Confighandler.dll 的 DLL。
- 打开 SmartClient.zip 中的项目,并将此(Confighandler.dll)添加到网站代码的引用中。
- 打开 web.config 文件,并将下面给出的代码添加到 web.config 文件中。
<httpHandlers> <!-- map .exe and .exe?blah.config files to our handler --> <add verb="*" path="*.exe" type="ConfigHandler.ConfigFileHandler, ConfigHandler" /> <remove verb="*" path="*.config" /> <add verb="*" path="web.config" type="System.Web.HttpForbiddenHandler" /> </httpHandlers>
- 现在构建网站代码。您应该能够通过以下 URL 启动它:https:///SmartClient/SmartClient.aspx 或 http://yourMachineName/SmartClient/SmartClient.aspx
- 这有助于消除当 exe 显示为exename.exe.config时出现的错误。
- 从智能客户端应用程序访问 Web 服务
- 打开 SmartClientApp.zip 文件中的项目,并在项目菜单中添加一个指向您的本地 Web 服务的 Web 引用,例如 https:///mywebserivce/mywebservice.asmx。将此 Web 服务引用重命名为 SerializeMe。
- 打开 app.config 文件并提供您的 Web 服务名称,例如
<configuration> <appSettings> <add key="AccessSerializeObject.SerializeMe.SerializeWS" value="https:///MySerializableWS/SerializeMe.asmx" /> <add key="WSPath" value="http://work02049/MySerializableWS/SerializeMe.asmx" /> </appSettings> </configuration>
现在您可以测试运行此应用程序了。
- 从网页启动应用程序
- 各位,这就像从同一站点或任何其他站点访问任何其他网页一样简单。只需在此站点中指定应用程序的位置和链接标签,您的应用程序就可以正常工作了。
- 将应用程序放在网站的根文件夹中。
- <a href=" ./SmartClient.exe">SmartClient.exe</a>
- 您甚至可以向 Windows 应用程序传递参数
<a href=" ./SmartClient.exe?PRM=xyz">SmartClient.exe?PRM=xyz </a>
或向您的应用程序传递多个参数,例如
<a href=" ./SmartClient.exe?PRM=xyz&PRM1=abc">SmartClient.exe?PRM=xyz&PRM1=abc</a>
- 您需要对传递给应用程序的参数进行不同的处理,我们将在下一节中讨论。
- 向智能客户端(NTD)应用程序传递参数
- 打开 smartclientapp 项目,找到一个名为 WebCommandLineHelper.cs 的文件。传递给应用程序的任何参数都将作为命令行参数传递,并在 main 方法中作为参数接收。我们需要删除头部部分,并获取传递给应用程序的命令的名称-值对。
- 以下是访问和分离这些名称-值对的代码,以便我们能够访问它们。
string[] args = WebCommandLineHelper.GetCommandLineArgs(argsFromMain); if(args.Length > 0) { for(int j = 0; j < args.Length; j++) { string[] pair = args[j].Split('&'); for (int i=0;i<pair.Length;i++) { string[] val = pair[i].Split('='); switch( val[0].ToLower() ) { //remore redundand items and check for case dependency case "prm" : strUserName = val[1].ToString(); break; case "prm1" : strPRM1 = val[1].ToString(); break; case "prm2" : strPRM2 = val[1].ToString(); break; } } } } strWSPath = System.Configuration.ConfigurationSettings.AppSettings["WSPath"];
- '=' 符号是名称-值对的分隔符,而 '&' 是不同参数的分隔符。
- 每次重建应用程序时清除 GAC 或更改应用程序版本
- 由于我们为应用程序使用了强名称,它会被存储在全局程序集缓存中。当我们重建应用程序并将其放回网站文件夹并尝试启动它时,它将显示 JIT 错误,因为已经存在一个具有相同名称、相同版本和相同强名称的程序集。您可以通过以下两种方法解决此问题。每次重建应用程序时,在 assembleyinfo.cs 文件中更改版本号。
[assembly: AssemblyVersion("1.0.1.6")]
或者,转到 .NET 命令提示符(开始->程序->Microsoft Visual Studio .NET 2003->Visual Studio .NET Tools->Visual Studio .NET 2003 Command Prompt),然后键入 gacutil /cdl
- 由于我们为应用程序使用了强名称,它会被存储在全局程序集缓存中。当我们重建应用程序并将其放回网站文件夹并尝试启动它时,它将显示 JIT 错误,因为已经存在一个具有相同名称、相同版本和相同强名称的程序集。您可以通过以下两种方法解决此问题。每次重建应用程序时,在 assembleyinfo.cs 文件中更改版本号。
- 使用应用程序
- 当您最终准备好使用它时,只需键入 URL https:///smartclient/
- 页面上有 3 个链接,在一个表中,它们将启动不带参数的应用程序(单击 SmartClient.exe 链接),另一个带有一个参数,用户必须在此处指定其姓名(单击 Click here SmartClient.exe?prm=xyz 链接),这将显示用户姓名在标题栏上。第三个有两个文本框,用户需要输入两个值,这两个值将在启动应用程序时相加。