2011-07-28 57 views
7

我有一個WCF服務在LAN上正常工作,但是嘗試從服務引用之外訪問它時失敗。WCF使用的是計算機名稱而不是IP地址,無法解析

我的WCF服務託管在使用靜態IP無域的win2k3盒子上。

+1

如果本地工作和WSDL顯示了80端口的網頁上​​,是否有可能您的服務使用其他端口,路由器防火牆阻止對這些端口的外部訪問? – Tod

+0

防火牆沒有問題,計算機名稱無法用局域網解決,但我現在有一個解決方案。無論如何thnx。 – baileyswalk

回答

2

經過一番挖掘,我找到了答案 - 這裏是我發現的希望它可以節省別人一些時間和麻煩。

1)添加到IP端點地址&添加主機名,象這樣的基礎IP地址:

<endpoint 
    address="http://xx.xx.xx.xx/ServiceApp/Service.svc" 
    binding="basicHttpBinding" contract="IService"> 
</endpoint> 
<host> 
    <baseAddresses> 
    <add baseAddress="http://xx.xx.xx.xx/ServiceApp/" /> 
    </baseAddresses> 
</host> 

過去,這是足以讓我的服務引用的工作,但迪斯科文件啓動與計算機名稱而不是IP返回(我認爲這是更新到.NET 4.0後)。

2.)如果你有一個域名(www.myDomain.com),然後將其添加到IIS中的主機頭。

3)IP地址&計算機名稱添加到客戶端的主機文件(容易解決並不總是能夠得到所有你的客戶把它添加到他們的但主機文件)

4)的最佳解決方案我發現了落實ServiceHosts工廠屬性按照「Timetheos」的帖子在這裏:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c7fd51a2-773e-41d4-95a0-244e925597fe

這對我的工作和我可以測試本地發展&調試我的服務庫中,然後使用服務應用服務部署到我dev服務器,並且在發佈它之後不必更改任何配置文件。

這整個過程是一場完全的噩夢,我不希望任何人如此,如果你處於相同的情況,需要了解上述要點的信息,請聯繫!

+0

嗨baileyswalk, 當我改變它的IP地址,它問我的用戶名和密碼,當我提供它不連接 –

14

這是我工作的。在配置文件

< serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel > 

如果它被設置爲false,我正在得到那個瘋狂的computername替換。

multipleSiteBindingsEnabled="true"似乎是我必須做的所有這些工作,因爲它應該。

+0

這對我在Win Server 2012上工作。 – skjoshi

+0

謝謝,這是適當的解決方案問題 –

+0

然後你應該在服務端點有相對的服務地址.. –

0

像這樣設置服務終點和httpgeturl。

<services> 
    <service behaviorConfiguration="serviceBehaviour" name="Demo.Service.MultiEndPointsService"> 
     <endpoint address="http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic" binding="basicHttpBinding" bindingConfiguration="basicBinding"  contract="Demo.Service.MultiEndPointsService" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="serviceBehaviour"> 
      <serviceMetadata httpGetEnabled="true" httpGetUrl="http://192.168.1.2/Demo.Service/MultiEndPointsService.svc/basic"/>  
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
4

我正在尋找一種方法來重用HTTP請求中的主機頭。在我看來,這應該像生產一樣發展。

原來是一樣簡單:

<behaviors> 
    <serviceBehaviors> 
     <behavior name="..."> 
     ... 
     <useRequestHeadersForMetadataAddress /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

這樣,如果WSDL端點是一個客戶端可以訪問這保證了所有相關的WSDL/XSD資源將具有相同的基本URL訪問。

+0

謝謝這對我有效 –

1

您可以在基本URL中的本地主機或計算機名的位置使用星號*(通配符),像這樣:

<add baseAddress="net.tcp://*:4502/WxWcfService_01" /> 
相關問題