我在配置了 IIS 的机器上运行了 WCF 自托管服务。自托管服务启动没有问题,一旦它启动并运行,我实际上可以访问 ?wsdl 路径。
如果我尝试在机器上点击以下地址,它会加载有关 svcutil.exe 以及如何访问该服务的网页。
http://myspecialservice:9000/
http://192.168.1.230:9000/
但是,如果我尝试从另一台机器上访问相同的地址。我什么都得不到。没有错误,页面无法加载。我已经测试以确保在使用主机名时解析到正确的 IP 地址。
此外,我已配置服务的 .exe 以允许在具有高级安全性的 Windows 防火墙中使用。适用于所有以太网配置文件和任何端口。任何建议都会有很大帮助。同样,我知道该服务可以在机器上本地访问,并且可以正常工作。看来我在某处缺少机器配置。
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="TextWriter" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log"/>
<add name="Console" type="System.Diagnostics.ConsoleTraceListener"/>
<remove name="Default"/>
</listeners>
</trace>
</system.diagnostics>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="CustomHttpBinding" maxReceivedMessageSize="2147483647">
<readerQuotas maxStringContentLength="2147483647"/>
</binding>
</basicHttpBinding>
</bindings>
<client/>
<services>
<service name="MyService.Data.Service" behaviorConfiguration="serviceBehavior">
<clear/>
<endpoint address="JobsHttp" binding="basicHttpBinding" contract="MyService.Data.IWhereItSits" bindingConfiguration="CustomHttpBinding"></endpoint>
<endpoint binding="mexHttpBinding" name="httpmex" contract="IMetadataExchange"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://myspecialservice:9000/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
编辑 1
因此,在防火墙上打开端口 9000 而不是为 service.exe 指定规则允许我访问本地网络上的服务。现在我正试图从外界访问该服务。我在路由器中添加了一条规则,将任何流量从端口 9000 推送到服务器本身,但我什么也没得到。
编辑 2
我已将网络监视器安装到 Web 服务器上,并且可以确认路由器正在将流量传回服务器本身。然后服务器尝试发回响应。
编辑 3
对我来说毫无意义。服务器有两个网卡,我的目标是从路由器到服务器的 1 个 IP。我将它更改为另一个 IP,它可以从外部工作,有什么解释或答案吗?