我有一个WinForms应用程序,它使用托管在远程服务器上的WCF服务。当我运行应用程序时,它会运行并加载数据,但在运行30秒或更长时间后,它会显示MessageSecurityException
:
安全处理器无法在中找到安全标头 信息。这可能是因为消息是不安全的故障或 因为通信方之间存在绑定不匹配。 如果为安全性和服务配置了服务,则会发生这种情况 客户端没有使用安全性。
我的服务配置是:
<system.serviceModel>
<!-- change -->
<bindings>
<customBinding>
<binding name="Wrabind" closeTimeout="00:05:00" openTimeout="00:05:00" sendTimeout="00:25:00">
<textMessageEncoding/>
<security authenticationMode="SecureConversation" includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings maxClockSkew="00:30:00" />
<localServiceSettings maxClockSkew="00:30:00" />
<secureConversationBootstrap messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
<localClientSettings maxClockSkew="00:30:00" />
<localServiceSettings maxClockSkew="00:30:00" />
</secureConversationBootstrap>
</security>
<httpTransport maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000" allowCookies="true" maxBufferSize="20000000" keepAliveEnabled="false" />
</binding>
</customBinding>
</bindings>
<!-- change -->
<services>
<service behaviorConfiguration="WServiceCoreService.Service1Behavior" name="WServiceCoreService.Service1">
<endpoint address="http://subdomain.domain.com/service1.svc" binding="customBinding" bindingConfiguration="Wrabind" contract="WServiceCoreService.IService1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WServiceCoreService.Service1Behavior">
<serviceThrottling
maxConcurrentCalls="200"
maxConcurrentSessions="200"
maxConcurrentInstances="200" />
<!-- To avoid disclosing metadata information, set the value below to false before deployment -->
<serviceMetadata httpGetEnabled="false" />
<!-- 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="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://subdomain.domain.com/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
我的WinForms客户端配置是:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="CustomBinding_IService1" maxBufferPoolSize="20000000" maxReceivedMessageSize="20000000" allowCookies="true" closeTimeout="00:05:00" openTimeout="00:05:00" sendTimeout="00:25:00">
<readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://subdomain.domain.com/service1.svc" binding="wsHttpBinding"
bindingConfiguration="CustomBinding_IService1" contract="WCoreService.IService1"
name="CustomBinding_IService1">
<identity>
<userPrincipalName value="WIN-489ESBTC0A0\servewranglein_web" />
</identity>
</endpoint>
</client>
</system.serviceModel>
我无法预测此配置的错误是什么。请帮我尽快解决。
更新:我使用的是.NET 4.0
答案 0 :(得分:0)
请尝试在客户端将enableUnsecuredResponse设置为true,并告诉我它是否有效。 有关更多详细信息,请参阅此http://support.microsoft.com/kb/971493。
答案 1 :(得分:0)
试试这个(主机和客户端):
<binding name="XXXXX">
<security mode="None" >
<transport clientCredentialType="None" />
<message establishSecurityContext="False" />
</security>
</binding>
答案 2 :(得分:0)
在我的情况下,在主机配置文件中的audienceUris标记中添加服务修复了相同的异常问题。
<system.identityModel>
...
<identityConfiguration>
...
<audienceUris>
<add value="serviceName.svc" />
</audienceUris>
...
</identityConfiguration>
...
</system.identityModel>