4

我在配置了 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,它可以从外部工作,有什么解释或答案吗?

4

1 回答 1

0

您在编辑中说您可以访问您的服务器,但 192.168.1.230 是本地地址。它仅在您的本地网络内有效。你对外的IP地址不同。:/


编辑

你的 IIS 在听什么?也许您的绑定(IIS->您的站点->右键单击->编辑绑定)仅设置为另一个 ip。如果是这样,将 IP 地址更改为“All Unasigned”应该会使您的服务也响应第一个 ip。

于 2013-06-21T09:11:59.903 回答