2009-09-09 69 views
0

我在同一臺機器上的兩個網站。第一個(客戶端)在第二個站點(服務器)上引用WCF服務。WCF端點,baseAddressPrefixFilters,主機頭

我如何設置地址服務引用?從本地計算機上的開發轉移到組開發服務器時,如何更改服務的URL?該網站是由主機頭分化,像 http://dev.admin/ ... 和 http://dev.public/ ...

我感覺到,這可以使用多個端點來處理,但我很新的WCF和真的沒有線索我在這裏做什麼。

回答

1

太多的無奈之後,我設法確定這兩個web.config文件中(客戶端和服務器上,這兩者都是在這種情況下,Web應用程序),下面的章節已被改變:

客戶端:

<client> 
     <endpoint 
     address="http://mysite.com:port/services/someservice.svc" 
     binding="basicHttpBinding" 
     bindingConfiguration="BasicHttpBinding_ISomeService" 
     contract="MyServices.ISomeService" 
     name="BasicHttpBinding_ISomeService" /> 

    </client> 
    </system.serviceModel> 

服務器

<system.serviceModel> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
     <add prefix="http://mysite.com:port/services"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MyServices.SomeServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="MyServices.SomeServiceBehavior" 
     name="MyServices.SomeService"> 
      <endpoint address="http://mysite.com:port/services/someservice.svc" 
        name="endpoint.SomeService" 
        binding="basicHttpBinding" 
        bindingConfiguration="" 
        contract="MyServices.ISomeService"/> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

的需要注意的是,所有三個相關部分(客戶端端點地址,服務器baseAddressPrefixFilter值和服務器端點地址)中的主機地址必須匹配。

我能夠在服務器之間通過修改這些,只要它們匹配切換。我仍然更喜歡根據服務器運行在哪臺機器上來設置它的方法,但是這個方法暫時適用。

WCF印象 什麼是熱點:持久對象。客戶端代理對象(在添加服務引用時創建)維護與服務器上服務的持久連接。客戶端代理引用的服務實例在調用之間維護其狀態,這可以簡化方法簽名並使客戶端代理對象和服務作爲整體對於某些應用程序更加有用。如果客戶端和服務器在公共庫中聲明,則可以在客戶端和服務器之間共享參數對象類型,這意味着您不必創建兩個非常相似的類或包裝類來來回傳遞非原始數據結構。

什麼不是:配置是一個皇家的痛苦,記錄不完整,並且涉及太多。使其在測試/ dev/staging/production環境配置中工作,其中需要了解其位置的服務令人沮喪。我不相信的是,製造服務意識到它的域名網址的(而不是說,到任何它上運行的相對路徑)有任何顯著的利益,安全問題放在一邊。

也就是說,我繼續沿着WCF路線走下去,因爲這樣的優勢遠遠超過了頭痛。

0

最簡單的方法:運行在不同的端口的WCF的部分。

+0

護理闡述?我不確定你的意思是「WCF零件」。另外,是否可以爲wcf指定一個與其所屬網站不同的端口?我爲什麼要這麼做? – 2009-09-09 19:09:51

+0

對不起,我更習慣於在服務中託管WCF,不在IIS內部。對於你的情況,你可能想看看http://ferventcoder.com/archive/2007/10/02/WCF-in-IIS-with-Websites-that-have-Multiple-Identities.aspx – 2009-09-09 19:35:44