无法远程访问WCF服务

时间:2013-08-13 06:38:39

标签: wcf web-services

背景

我们在使用 basicHttpBinding 运行的 Windows服务中托管 WCF网络服务

问题

浏览本地计算机上的服务URL工作正常,但尝试使用外部IP地址(远程或本地EVEN)进行浏览不起作用。例如:

http://localhost:8000/booking.svc(好)

http://<external-IP>:8000/booking.svc(不行)

的app.config

<system.serviceModel>

    <services>
      <service behaviorConfiguration="DefaultServiceBehavior" name="HotelManagementSystem.ServiceHost.BookingService">
        <endpoint address="" binding="basicHttpBinding" contract="HotelManagementSystem.ServiceHost.IBookingService" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/booking.svc" />
          </baseAddresses>
        </host>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

有人有什么想法吗?

1 个答案:

答案 0 :(得分:4)

尝试使用useRequestHeadersForMetadataAddress

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <useRequestHeadersForMetadataAddress />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

这将允许服务将用于访问服务的URI插入元数据中,以便wsdl对齐。有时您会访问http://1.2.3.4/service.svc,但元数据会引用http://localhost。在本地,这很好,但远程,使得无法获取端点信息。相反,现在所有这些localhost引用都将使用1.2.3.4