繁体   English   中英

如何防止其他人添加托管的wcf服务的服务引用?

[英]How to prevent others from adding the service reference of the hosted wcf service?

如果我托管WCF服务,以便某人(即我认识的人)可以使用我的服务,但是如果其他人(即我不认识的人)可以使用我的服务,那该怎么办呢? 我该如何预防呢?

可以通过服务限制来完成此操作,或者通过其他方式实现此目的?

如果您希望某些客户端可以使用(或查看)您的服务,而某些客户端不能使用(或查看)您的服务,则需要在服务上设置身份验证,以便只有您允许的客户端才能访问(或查看)您的服务。

我不了解您的整个情况,但是使用基本身份验证的传输安全性可能就足够了。 若要启用您将在IIS中禁用匿名访问,请将IIS配置为使用基本身份验证,然后在绑定配置集中:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>


将您的mex绑定设置为使用安全绑定,而不是默认的mexHttpBinding。 您还需要站点的SSL证书(如果使用WSHttpBinding)。

更新:这是一个示例, 自定义安全元数据端点 ,该示例演示了如何使用安全元数据端点来实现服务。

不,WCF中没有机制允许某些客户端在禁止其他客户端的同时使用您的服务。 您需要从另一个角度来解决这个问题。

一种方法是不自动从服务中发布元数据(例如,使其几乎“不可见”),然后将所需的元数据信息以一个或几个WSDL和一个或几个XSD文件的形式分发给您要连接的那些客户端您的服务。 如果您的元数据不可用,则仅浏览到您的服务地址的人将不会获得有关呼叫内容的任何信息。

元数据交换受<serviceMetadata>行为以及<serviceMetadata>具有“ mex”端点的控制。 同时删除两者,您的服务将不可见。

另一种方法是根据防火墙和网络规则禁止任何外部用户访问您的WCF服务器。 WCF无法做到这一点,但是您的网络管理员可以限制哪些IP对运行WCF服务的计算机具有物理访问权限。

更新:
为了将元数据发送给应该能够调用您的服务的用户,您可以执行以下两项操作之一:

1)使用svcutil.exe /t:metadata (path+name of your service assembly) ,您可以从服务程序MyServiceLibrary.dll提取元数据(例如MyServiceLibrary.dll )。 这将为您提供一个或几个WSDL和一个或几个XSD文件,您需要将它们运送到目标用户。 他们可以将这些文件放在硬盘上的某个位置,然后在“添加服务引用”中,而不是输入URL来发现服务,而是可以输入主WSDL的名称(导入所有其他文件),然后获得他们的客户代理。

要么:

2)随着服务的启动和运行,您可以将“添加新项目”添加到解决方案中,选择一个类库( MyService.Client ),然后执行“添加服务引用”并输入服务URL。 这将在新类库中创建所有必需的文件和所有内容。 编译该类库并将该程序集MyService.Client.dll给您要允许访问您的服务的用户。

使用这两种解决方案,您都无需启用元数据交换,并且其他人也不能只是走近您的服务并获取所有必要信息以进行调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM