Wcf 在web.config中添加tokenprovider的凭据
编辑:更多详细信息: 关于我的问题的更多信息: 我使用服务总线向WCF服务发送异步事件。我有一个配置如下的客户端:Wcf 在web.config中添加tokenprovider的凭据,wcf,wcf-binding,servicebus,Wcf,Wcf Binding,Servicebus,编辑:更多详细信息: 关于我的问题的更多信息: 我使用服务总线向WCF服务发送异步事件。我有一个配置如下的客户端: <client> <endpoint address="sb://[Server].[Domain]/NameSpace/eventqueue" behaviorConfiguration="securityBehavior" binding="netMessagingBinding" bindingConfiguration="messagi
<client>
<endpoint address="sb://[Server].[Domain]/NameSpace/eventqueue"
behaviorConfiguration="securityBehavior" binding="netMessagingBinding"
bindingConfiguration="messagingBinding" contract="xxx.IEventQueueService"
name="Subscriber" />
</client>
<services>
<service name="xxx.EventQueueService">
<endpoint address="sb://[SERVER].[DOMAIN]/Namespace/eventqueue"
behaviorConfiguration="securityBehavior" binding="netMessagingBinding"
bindingConfiguration="messagingBinding" name="EventQueueClientService"
contract="xxx.IEventQueueService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/xxx.ExternalServices/EventQueueService" />
</baseAddresses>
</host>
</service>
</services>
请注意,它是我们自己域中的一个虚拟服务器
以下是行为和绑定配置:
<behavior name="securityBehavior">
<transportClientEndpointBehavior>
<tokenProvider>
<windowsAuthentication>
<stsUris>
<stsUri value="https://[Server].[Domain]:9355/[Namespace]" />
</stsUris>
</windowsAuthentication>
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
<netMessagingBinding>
<binding name="messagingBinding" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:03:00" sendTimeout="00:03:00" sessionIdleTimeout="00:01:00" prefetchCount="-1">
<transportSettings batchFlushInterval="00:00:01" />
</binding>
</netMessagingBinding>
我的WCF服务使用相同的配置:
<client>
<endpoint address="sb://[Server].[Domain]/NameSpace/eventqueue"
behaviorConfiguration="securityBehavior" binding="netMessagingBinding"
bindingConfiguration="messagingBinding" contract="xxx.IEventQueueService"
name="Subscriber" />
</client>
<services>
<service name="xxx.EventQueueService">
<endpoint address="sb://[SERVER].[DOMAIN]/Namespace/eventqueue"
behaviorConfiguration="securityBehavior" binding="netMessagingBinding"
bindingConfiguration="messagingBinding" name="EventQueueClientService"
contract="xxx.IEventQueueService" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/xxx.ExternalServices/EventQueueService" />
</baseAddresses>
</host>
</service>
</services>
但这两个选项不起作用:
<windowsAuthentication userName="xxx" password="xxx" domain="xxx">
System.ArgumentNullException: Value cannot be null.
Parameter name: s
at System.Convert.FromBase64String(String s)
at Microsoft.ServiceBus.SharedSecretTokenProvider.DecodeSecret(String issuerSecret)
at Microsoft.ServiceBus.Description.SharedSecretCredential.CreateTokenProvider()
at Microsoft.ServiceBus.Description.TransportClientCredentialBase.get_TokenProvider()
at Microsoft.ServiceBus.TransportClientEndpointBehavior.get_TokenProvider()
at Microsoft.ServiceBus.Messaging.NetMessagingTransportBindingElement.CreateMessagingFactorySettings(BindingContext context)
at Microsoft.ServiceBus.Messaging.Channels.ServiceBusChannelListener`1..ctor(BindingContext context, NetMessagingTransportBindingElement transport)
at Microsoft.ServiceBus.Messaging.NetMessagingTransportBindingElement.BuildChannelListener[TChannel](BindingContext context)
at System.ServiceModel.Channels.Binding.BuildChannelListener[TChannel](Uri listenUriBaseAddress, String listenUriRelativeAddress, ListenUriMode listenUriMode, BindingParameterCollection parameters)
at System.ServiceModel.Description.DispatcherBuilder.MaybeCreateListener(Boolean actuallyCreate, Type[] supportedChannels, Binding binding, BindingParameterCollection parameters, Uri listenUriBaseAddress, String listenUriRelativeAddress, ListenUriMode listenUriMode, ServiceThrottle throttle, IChannelListener& result, Boolean supportContextSession)
at System.ServiceModel.Description.DispatcherBuilder.BuildChannelListener(StuffPerListenUriInfo stuff, ServiceHostBase serviceHost, Uri listenUri, ListenUriMode listenUriMode, Boolean supportContextSession, IChannelListener& result)
at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
at System.ServiceModel.ServiceHostBase.InitializeRuntime()
at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)
System.ArgumentNullException:值不能为null。
参数名称:s
在System.Convert.FromBase64String处(字符串s)
在Microsoft.ServiceBus.SharedSecretTokenProvider.DecodeSecret(字符串颁发者保密)
在Microsoft.ServiceBus.Description.SharedSecretCredential.CreateTokeProvider()上
在Microsoft.ServiceBus.Description.TransportClientCredentialBase.get_TokenProvider()上
在Microsoft.ServiceBus.TransportClientEndpointBehavior.get_TokenProvider()上
位于Microsoft.ServiceBus.Messaging.NetMessagingTransportBindingElement.CreateMessagingFactorySettings(BindingContext上下文)
位于Microsoft.ServiceBus.Messaging.Channels.ServiceBusChannelListener`1..ctor(BindingContext上下文,NetMessagingTransportBindingElement传输)
位于Microsoft.ServiceBus.Messaging.NetMessagingTransportBindingElement.BuildChannelListener[TChannel](BindingContext上下文)
在System.ServiceModel.Channels.Binding.BuildChannelListener[TChannel](Uri listenUriBaseAddress,String ListenUrIReRelativeAddress,ListenUriMode ListenUriMode,BindingParameterCollection参数)
在System.ServiceModel.Description.DispatcherBuilder.MaybeCreateListener(布尔实际创建,类型[]SupportedChannel,绑定绑定,绑定参数集合参数,Uri listenUriBaseAddress,字符串listenUriRelativeAddress,ListenUriMode ListenUriMode,ServiceThrottle throttle,IChannelListener&result,布尔supportContextSession)
位于System.ServiceModel.Description.DispatcherBuilder.BuildChannelListener(StuffPerListenUriInfo stuff、ServiceHostBase serviceHost、Uri listenUri、ListenUriMode ListenUriMode、Boolean supportContextSession、IChannelListener和result)
位于System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription,ServiceHostBase serviceHost)
位于System.ServiceModel.ServiceHostBase.InitializeRuntime()处
位于System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan超时)
在System.ServiceModel.Channels.CommunicationObject.Open处(TimeSpan超时)
位于Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo信息)
及
=>属性“用户名”不是ConfigurationElement找到了此问题的解决方案
部署应用程序时,请确保IISPool的所有者(或模拟的用户)也是服务总线命名空间的ManagedUsers成员。您可以使用Get SBNamespace-Name检查这一点
将用户添加到命名空间:设置SBNamespace-Name-ManageUsers您在web应用程序中使用的servicebus dll的哪个版本?1.8.0.0,来自NuGet。(适用于Windows Server的服务总线1.0)