gpt4 book ai didi

wcf - WCF 端点中的同一 Windows 服务器服务总线命名空间中有两个不同的主题

转载 作者:行者123 更新时间:2023-12-05 07:56:40 24 4
gpt4 key购买 nike

我定义了两个端点,指向两个不同的服务总线主题。具有相同的 TransportClientEndpointBehavior 和相同的服务。

<endpointBehaviors>
<behavior name="securityBehavior">

<transportClientEndpointBehavior>
<tokenProvider>
<windowsAuthentication>
<stsUris>
<stsUri value="https://on-permises:9355/Namespace" />
</stsUris>
</windowsAuthentication>
</tokenProvider>
</transportClientEndpointBehavior>
</endpointBehaviors>

<customBinding>
<binding name="messagingBinding" >
<textMessageEncoding messageVersion="None" writeEncoding="utf-8" >
<readerQuotas maxStringContentLength="2147483647"/>
</textMessageEncoding>
<netMessagingTransport/>
</binding>
</customBinding>

<endpoint name="endpoint1"
address="sb://on-permises/Namespace/topic1"
listenUri="sb://on-permises/Namespace/topic1/subscriptions/sub"
binding="customBinding"
bindingConfiguration="messagingBinding"
contract="WCFService.IService1"
behaviorConfiguration="securityBehavior" />

<endpoint name="endpoint2"
address="sb://on-permises/Namespace/topic2"
listenUri="sb://on-permises/Namespace/topic2/subscriptions/sub"
binding="customBinding"
bindingConfiguration="messagingBinding"
contract="WCFService.IService2"
behaviorConfiguration="securityBehavior" />

运行应用程序后,我收到错误:System.ArgumentException:无法将值添加到集合中,因为集合已包含相同类型的项目:“Microsoft.ServiceBus.TransportClientEndpointBehavior”。该集合仅支持每种类型的一个实例。参数名称:item

我尝试定义两个不同的端点行为,但得到相同的错误。这里的任何帮助都会有帮助的。

最佳答案

找到了解决方案,问题是服务主机尝试在 WSDL/元数据中添加这两个服务端点。这是没有必要的。因此,在 ServiceMetadataContractBehavior (IContractBehavior ) 的帮助下,停止公开 WSDL/Metadata 。

任何更好的方法或更正请告诉我。

public class DisableContractMetadata : Attribute, IContractBehavior

{

public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)

{

}


public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)

{



}


public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)

{

/// Here ServiceMetadataContractBehavior type is derived from IContractBehavior

/// MetadataGenerationDisabled property of ServiceMetadataContractBehavior type = flase disables disables exposing WSDL

contractDescription.ContractBehaviors.Add(new ServiceMetadataContractBehavior() { MetadataGenerationDisabled = true });

}


public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)

{



}

}

关于wcf - WCF 端点中的同一 Windows 服务器服务总线命名空间中有两个不同的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28342377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com