如果您有任何不是.NET的客户端(例如Java或PHP),ChannelFactory
将不适用于他们,因为这是.NET和WCF特有的。在这种情况下,您必须发布元数据或者向客户端发送WSDL,以便他们可以通过他们选择的语言使用的任何方式创建代理(我对Java,PHP等知之甚少,因此我可以'不仅仅是说明确地说)。
至于使用ChannelFactory
,我假设你说的是ChannelFactory<T>
,因为ChannelFactory
本身是一个抽象类,不能实例化。使用渠道工厂提供了更大程度的控制权(如其他人所指出的) - 对于ChannelFactory<T>
,客户端需要服务合同(接口,而不是实施),因此无论是使用每个人共享的常见程序集还是为客户端提供接口是实现这个目标的两个最简单的方法。
您可以通过在<serviceMetadata>
标签在你的配置文件转httpGetEnabled
为“false”禁用发布元数据(WSDL中):
<system.serviceModel>
<behaviors>
<serviceBehavior>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehavior>
</behaviors>
</system.serviceModel>
你会再通过端点元素的behaviorConfiguration
属性设置为引用此行为“MyServiceBehavior”。
您还应该删除任何mex
端点(基于我的理解),这是Web服务公开其元数据的新方式。如果元数据未公开,则客户端无法通过WSDL构造代理,并且必须通过其他方法来完成此操作。 .NET客户端将无法使用“添加服务引用”。
最后,如果你担心访问你的服务,你应该真的实现某种认证方案。如果您只是想禁用发布(公开)元数据,然后将httpGetEnabled
设置为false,并删除任何mex端点应该做的伎俩。
来源
2014-01-24 17:01:38
Tim
_“如果其他人知道我的服务网址,那么他们将无法添加我的服务作为添加服务引用[...]我希望其他人无法在其最终创建代理服务器,如果他们知道我的服务url“_ - **”Add Service Reference“也会生成一个代理**。你似乎在问错误的问题。你想做什么?从您的问题历史中,我强烈建议您选择一本WCF书籍或学习课程,因为您似乎无法理解最基本的概念。 – CodeCaster