2013-06-05 45 views
2

所以我創建了我的公共WCF服務,它是可訪問的,並且它可以工作。但是,我注意到在檢索wsdl中的可用方法時,有些方法可供公衆使用,我不希望這些方法可以訪問。如何創建只有我可以通過WCF訪問的公共端點和本地端點?

例子:

public interface IJobs { 
    List<Jobs> GetAllJobs(); //Good 
} 

public interface IJobManagement { 
    void AddNewJob(Jobs job); //Bad 
} 

配置

<services> 
    <service name="Services.Data.PublishService" > 
    <clear/> 
    <endpoint address="JobsHttp" binding="basicHttpBinding" contract="Services.Data.IJobs" ></endpoint> 
    <endpoint address="JobsTCP" binding="netTcpBinding" contract="Services.Data.IJobManagement" /> 
    <endpoint binding="mexHttpBinding" name="httpmex" contract="IMetadataExchange"></endpoint> 
    <endpoint binding="mexTcpBinding" name="mex" contract="IMetadataExchange"></endpoint> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:9000/"/> 
     <add baseAddress="net.tcp://localhost:9001"/> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 

我想,也許創造一個新的端點將解決我的問題,但在這個配置中它什麼也沒做,我知道爲什麼了。我只是想弄清楚如何將IJobManagement從圖片中公開出來,並且只能在本地網絡上訪問。

這是我的服務類,我的方法存在於那裏。

public class PublishService : IJobs, IJobsTCP { //Methods are in here. } 

編輯

而且進一步說明,當一個新作業添加我還有一個WCF服務,將推動這個WCF服務,並修改List<Jobs>

回答

1

您可以限制在訪問通過實施基於原理的安全性,其中只有特定組中的用戶才被允許訪問某些方法。

例如,MSDN表明,只有中的作用「CalculatorClients」用戶可以通過註釋的方法來訪問這個方法添加的PrincipalPermission

[PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")] 
public double Add(double a, double b) 
{ 
    return a + b; 
} 

您也可以限制基於方法客戶端證書,通過指定主題名稱和證書的指紋,如MSDN所示:

[PrincipalPermission(SecurityAction.Demand, 
    Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")] 
public double Multiply(double a, double b) 
{ 
    return a * b; 
} 

要回答您關於本地帳戶限制的問題,另一個選項是按帳戶名稱進行限制。

[PrincipalPermission(SecurityAction.Demand, Name="SomeAccountName")] 

但是,這些本地帳戶仍應在您可以在前面的示例中應用的組中。通過實際名稱進行限制對您的應用程序開發非常具有限制性和靜態

請參閱MSDN上的full article

+0

這是基於AD組,我假設? – meanbunny

+0

這將是一個肯定! – meanbunny

+0

對於這個答案還有一個問題,如果我正在本地系統帳戶中運行另一項服務,我將如何在該服務帳戶的所述方法上允許安全性? – meanbunny