以下是我的WCF服务的绑定配置。
支持HTTP协议。
访问我的WCF服务时出现以下异常:
此服务的安全设置需要“匿名”身份验证,但未为承载此服务的IIS应用程序启用。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType ="Basic" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="WMWcfWebServiceLib.Service1Behavior"
name="WMWcfWebServiceLib.WMWcfWebService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding"
contract="WMWcfWebServiceLib.IWMWebService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WMWcfWebServiceLib/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WMWcfWebServiceLib.Service1Behavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
请帮助!!
修改
我可以通过Web浏览器访问WCF服务,并进行以下更改:
将安全模式更改为TransportCredentialOnly并删除Mex端点,但现在很明显我无法在客户端创建代理。
请告诉我错误的地方?
答案 0 :(得分:1)
如果您只想支持HTTP,则根本不使用您的配置,因为mode="Transport"
需要HTTPS。首先找到为什么不使用config(可能在service元素中输入错误的类型名称)。接下来将安全模式更改为TransportCredentialOnly
。但请注意TransportCredentialOnly
+基本身份验证意味着HTTP请求将包含纯文本Windows用户名和密码。在大多数情况下,此类实施不会通过任何安全审核。
编辑:
如果您仍然支持服务元数据行为中的httpGetEnabled
,则可以创建不带mex端点的代理。