65.9K
CodeProject 正在变化。 阅读更多。
Home

为使用 WCF 服务的 Web 应用程序创建安装文件

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2012年10月16日

CPOL

2分钟阅读

viewsIcon

13705

为 WCF 框架连接字符串,并为 Web 应用程序提供服务 URL 以进行通信

引言

上一篇文章中,我们已经了解了为 Windows 应用程序创建安装程序以及创建连接字符串的方法。现在
我们将看到在具有 WCF 服务的 Web 应用程序中的相同概念。

步骤

步骤 1:我们需要为 WCF 服务项目创建安装文件,并动态地构建连接字符串。
步骤 2:创建另一个安装程序,用于需要消耗 WCF 服务 URL 的 Web 应用程序,以便在 WCF 服务和 Web 应用程序之间进行通信。

为 WCF 项目创建安装程序

安装程序创建的初步信息

  • 有关添加安装程序项目、输入渲染和连接字符串构建的基本信息,请参考本文:
https://codeproject.org.cn/Tips/446121/Adding-connection-String-During-Installation

自定义安装程序以创建连接字符串

在此过程中,我们将从用户处获取实例名称和数据库名称,并在安装期间使用。

添加主输出文件

在这里,我们需要选择主输出文件和内容文件,并将所有 DLL 的“复制到本地”属性设置为 true。

添加自定义操作数据
在此步骤中,我们传递输入的连接字符串参数。

现在,我直接进入下一步,即查找文件路径并创建虚拟目录。


                // OnAfterInstall 

                dataSource = "Data Source = " + dataSource + ";Integrated Security=SSPI;";   
                string configFile=string.Concat(Assembly.GetExecutingAssembly().Location,"Web.config");
                int index = configFile.IndexOf("bin");
                configFile = configFile.Substring(0, index);
                VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(configFile, true);
                WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
                wcfm.VirtualDirectories.Add("/", vdm);
                System.Configuration.Configuration webConfig =
                System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
                string connectionsection = 
                webConfig.ConnectionStrings.ConnectionStrings["ConnectionString"].ConnectionString;
                ConnectionStringSettings connectionstring = null;
                if (connectionsection != null)
                {
                    webConfig.ConnectionStrings.ConnectionStrings.Remove("ConnectionString");
                }
                connectionstring = new ConnectionStringSettings("ConnectionString", dataSource);
                webConfig.ConnectionStrings.ConnectionStrings.Add(connectionstring);
                webConfig.Save();
                ConfigurationManager.RefreshSection("connectionStrings"); 
  • 如果我们在 web.confg 中找到任何连接字符串,我们将删除它并添加一个基于用户提供的输入的新连接。

Web.Config 连接字符串部分

//Web.Config Connection string section 

  <connectionStrings>
       <add name="ConnectionString" connectionString="Data Source=Instancename;Initial Catalog=Databasename;Integrated Security=SSPI"
  </connectionStrings>
  • 现在安装文件已准备好安装,完成构建后它将在 IIS 中托管。

需要记住的点

  • 我们正在更改 web.config 中的这一部分,这里的键名应与安装程序类中提供的键名匹配(add name="ConnectionString")。

为 Web 应用程序创建安装文件


  • 在此安装过程中,我们需要提供一个文本框来获取服务 URL,以便与 WCF 服务进行通信。
  • 提供一个文本框、主输出文件和内容文件,以及上述文章中解释的自定义操作数据。
  • 我们需要提供在运行服务后获得的 service url。

    安装期间添加的自定义文本框,用于提供端点 URL

     // Web.Config showing end pont address
             <client>
                <endpoint address="https://:8080/HiSEDService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHiSEDService" contract="WCFService.IHiSEDService" name="BasicHttpBinding_IHiSEDService"/>
             </client> 
       

    我们需要插入一个新的服务 URL 端点地址(“https://:8080/HiSEDService.svc”)。

    此 URL 有助于创建一个通信平台。

     
     
                //OnAfterInstall
    
                string dataSource = Context.Parameters["Serviceurl"];
                string configFile = string.Concat(Assembly.GetExecutingAssembly().Location,"Web.config");
                int index = configFile.IndexOf("bin");
                configFile = configFile.Substring(0, index);
                VirtualDirectoryMapping vdm = new VirtualDirectoryMapping(configFile, true);
                WebConfigurationFileMap wcfm = new WebConfigurationFileMap();
                wcfm.VirtualDirectories.Add("/", vdm);
                System.Configuration.Configuration webConfig = 
                System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
                ServiceModelSectionGroup smsg = 
                webConfig.GetSectionGroup("system.serviceModel") as ServiceModelSectionGroup;
                int value = smsg.Client.Endpoints.Count;
                smsg.Client.Endpoints[0].Address = new Uri(dataSource);
                webConfig.Save(); 

    在这里,我们定位文件路径并映射它,在 IIS 中创建虚拟目录,并替换 web.config 中的端点地址 URL。

    现在安装程序已准备好安装,构建完成后即可。


© . All rights reserved.