我创建了一个可用的 WCF 服务,现在想为它添加一些安全性以过滤 IP 地址。我已经按照 Microsoft 在示例中发布的示例尝试添加 IDispatchMessageInspector,并在其中引发调用 AfterReceiveRequest ,然后如果 IP 地址不在允许列表中就抛出错误。
在查看代码后,他们使用了 'wsHttpBinding' 进行配置,但我想使用 'webHttpBinding' 或 'basicHttpBinding'。但当我设置后,会出现以下错误:
'http://upload/api/Api.svc/soap' 上的终结点没有 None MessageVersion 的绑定。 'System.ServiceModel.Description.WebHttpBehavior' 仅适用于 WebHttpBinding 或类似的绑定。
我的配置如下:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>
<!--Set up the service-->
<services>
<service behaviorConfiguration="SOAPRESTDemoBehavior" name="HmlApi">
<endpoint address="rest" binding="webHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" />
<endpoint address="soap" binding="basicHttpBinding" contract="VLSCore2.Interfaces.IHmlApi" behaviorConfiguration="SOAPRESTDemoEndpointBehavior" />
</service>
</services>
<!--Define the behaviours-->
<behaviors>
<serviceBehaviors>
<behavior name="SOAPRESTDemoBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<!---Endpoint -->
<endpointBehaviors>
<behavior name="SOAPRESTDemoEndpointBehavior">
<ipFilter/>
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add name="ipFilter" type="VLSCore2.Api.IpFilterBehaviourExtensionElement, VLSCore2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
我想知道如何在不使用WebHttpBinding的情况下设置我的消息检查器。这是否可能?
我想使用SOAP的'basicHttpBinding'而不是wsHttpBinding(以及所有与WS *相关的开销....)