背景
我们在运行basicHttpBinding的Windows服务中托管了WCF Web服务。
问题
浏览本地计算机上的服务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>
有人有主意吗?
尝试使用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
而不是。