2

所以我创建了我的公共 WCF 服务,它是可访问的,并且可以正常工作。但是,在检索 wsdl 中的可用方法时,我注意到有些方法可供公众使用,但我不想被访问。

例子:

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>

4

1 回答 1

1

您可以通过实施基于原则的安全性来限制方法级别的访问,其中仅允许特定组中的用户访问某些方法。

例如,MSDN 演示了只有角色“CalculatorClients”中的用户才能通过使用PrincipalPermission注释方法Add来访问此方法

[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 上的完整文章

于 2013-06-05T14:45:38.273 回答