2011-01-21 154 views
1

我已經開發了具有兩個合同Contract1和Contract2暴露在兩個不同端點的WCF服務消費WCF服務。 當我要添加對我的客戶端應用程序的引用時,它允許我使用這兩個合同。限制客戶端應用程序上只有一個端點

我如何限制客戶端應用程序只使用一個合同?

這裏是我的web.config代碼提前

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="MyWCFService.Service1Behavior" 
     name="MyWCFService.Service1"> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost:1010/Service1.svc"/> 
       </baseAddresses> 
      </host> 

      <endpoint address="/MyService1" binding="wsHttpBinding" contract="MyWCFService.IService1" />     
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
      <endpoint address="/MyService2" binding="wsHttpBinding" contract="MyWCFService.IService2" /> 

     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="MyWCFService.Service1Behavior"> 
       <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
       <serviceMetadata httpGetEnabled="true"/> 
       <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
       <serviceDebug includeExceptionDetailInFaults="false"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

感謝。

回答

2

爲什麼不2周的合同分爲兩個web服務端點上不同的地址以及每個1個合同打破單一的Web服務端點和客戶端應用程序只使用一個。

它目前還不清楚爲什麼您的設計需要1個端點2周的合同,只允許客戶使用1個合同。

或者增加一些安全性,也許一些非常基本的東西,如密碼字段添加到方法簽名中要限制訪問合同。

+0

+1這是一個有效的解決方案。如果您不想將第二份合同暴露給第一份合同的客戶,請不要在相同的服務中實施它們。這將爲您節省大量的工作 - 更多的是在同一服務中實施這些合同可能沒有附加價值。 – 2011-01-21 09:04:20

1

我能想到的兩種方法 -

  1. 第一種方法是使用防火牆來阻止第二服務URL。如果您選擇不同的基地址(可能是端口或主機標頭),這將有所幫助。另一種變化是將第二個Web服務託管在不同的應用程序/網站中,並阻止它從外部訪問。分離服務從分離元數據(mex)端點(也就是當前共享端點將爲這兩種服務發佈WSDL)中分離服務也是有意義的 - 如果您不希望發佈第二個Web服務的元數據(公共端點)它被其他人消費。

  2. 方式二要依賴於Web服務安全性 - 本質上,與未發佈到外部各方的憑據讓你的第二個Web服務。

0

IIS提供基於IP的有限過濾服務。

Windows網絡提供有限的基於IP的過濾服務。

防火牆將提供您需要的任何過濾。

0

我也做了以下解決方案..

  1. 創建服務合同2個接口..假設IService1和IService2。

  2. 實現這些2個接口的服務類。讓我們將其命名爲service1

  3. 從Service1創建派生服務類。只是一個空白的派生類。

  4. 創建第一個服務的app.config

  5. 兩個不同的服務元素,創造了一些地址終點和綁定,並提供IService1的合同。它將擁有自己的基地址

  6. 在第二個服務中創建具有不同地址和綁定的端點並提供IService2作爲合同。它將有自己的基地址,這將是不同的。

現在根據您的選擇將任何地址分享給客戶。