1

我有一个在以下端点侦听的自托管 WCF 服务(即 Windows 服务主机,而不是控制台主机):

http://localhost:8733/Design_Time_Addresses/MBMServices/MBMExtClientService/ 

无论我在防火墙中打开多少,它都不会接受任何连接。我必须完全关闭防火墙才能接受请求。即使我将程序更改为“任何”,即不是 servicehost.exe,它仍然不会接受请求。

我已经使用 WiX 编写了一些入站规则。像这样:

 <Fragment>
<ComponentGroup Id='MBMServicePackage' Directory="INSTALLFOLDER">

  <Component Id="MBMService" Guid="e2696e40-6166-49e9-a324-ac417d9b46be">
    <fire:FirewallException Id="MBMServicesHost.tcp" Name="MBM Services tcp" Program="MBMServiceHost.exe" Profile="all" Scope="any"/>
    <fire:FirewallException Id="MBMServiceHost.config.tcp" Name="MBM Services tcp" Program="MBMServiceHost.exe.config" Profile="all" Scope="any"/>
    <fire:FirewallException Id="MBMServicedll.tcp" Name="MBM Services tcp" Program="MBMServices.dll" Profile="all" Scope="any"/>

    <File Id="MBMServiceHost.exe" Name="MBMServiceHost.exe" Source="..\MBMServiceHost\bin\Debug\MBMServiceHost.exe" Vital="yes" KeyPath="yes" DiskId="1">
    </File>
    <File Id="MBMServiceHost.exe.config" Name="MBMServiceHost.exe.config" Source="..\MBMServiceHost\bin\Debug\MBMServiceHost.exe.config" Vital="yes" KeyPath="no" DiskId="1">
    </File>
    <File Id="MBMServices.dll" Name="MBMServices.dll" Source="..\MBMServices\bin\Debug\MBMServices.dll" Vital="yes" KeyPath="no" DiskId="1">
    </File>

    <File Id="MBMBusinessLayer.dll" Name="MBMBusinessLayer.dll" Source="..\MBMBusinessLayer\bin\Debug\MBMBusinessLayer.dll" Vital="yes" KeyPath="no" DiskId="1">
      <fire:FirewallException Id="MBMBusinessLayerdll.tcp" Name="MBM Services tcp" Port="*" Protocol="tcp" Profile="all" Scope="any"/>
    </File>
    <File Id="MBMBusinessLayer.dll.config" Name="MBMBusinessLayer.dll.config" Source="..\MBMBusinessLayer\bin\Debug\MBMBusinessLayer.dll.config" Vital="yes" KeyPath="no" DiskId="1">
      <fire:FirewallException Id="MBMBusinessLayer.config.tcp" Name="MBM Services tcp" Port="*" Protocol="tcp" Profile="all" Scope="any"/>
    </File>

      <ServiceInstall
         Id="ServiceInstaller"
         Type="ownProcess"
         Vital="yes"
         Name="MBMService"
         DisplayName="MBMService"
         Description="MBMService"
         Start="auto"
         Account="LocalSystem"
         ErrorControl="ignore"
         Interactive="no">
      </ServiceInstall>
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="MBMService" Wait="yes" />

  </Component>      
</ComponentGroup>

在此线程上,评论提示添加 https.sys: WCF 服务被 Windows 防火墙阻止

然后他们继续说这个页面讨论了向异常添加 URL 或其他内容: https ://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-http-and- https

所以我在电脑上手动添加了 https.sys(位于 C:\Windows\System32\https.sys)并进行了测试。依然没有。

我怀疑我需要添加 URL 的东西,但我不知道该怎么做,而且像往常一样,WiX 文档非常稀疏。

有人有想法么?

编辑,解决方案:如该线程中所述:

WiX Installer:如何添加防火墙例外规则?

FirewallException 元素需要位于 Component 标记中,而不是 file 标记中。文档确实避开了这一点,但像往常一样没有正确解释或给出任何示例。

另外,为了实现Program=any、Port=8733的防火墙规则,需要省略program属性。同样,文档确实避免使用 Port OR Program,详细说明如果同时定义了这两个规则,则该规则将不适用于防火墙。但是,它没有详细说明与这些属性相关的最终防火墙规则。

以下 WiX 代码已实现并允许请求通过。

<Fragment>
<ComponentGroup Id='MBMServicePackage' Directory="INSTALLFOLDER">

  <Component Id="MBMService" Guid="e2696e40-6166-49e9-a324-ac417d9b46be">
    <fire:FirewallException Id="MBMServicesHost.tcp" Name="MBM Services tcp" Port="8733" Profile="all" Scope="any"/>

    <File Id="MBMServiceHost.exe" Name="MBMServiceHost.exe" Source="..\MBMServiceHost\bin\Debug\MBMServiceHost.exe" Vital="yes" KeyPath="yes" DiskId="1">
    </File>
4

0 回答 0