e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
168 lines
7.4 KiB
C#
168 lines
7.4 KiB
C#
//-----------------------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace System.ServiceModel.Description
|
|
{
|
|
using System.IO;
|
|
using System.ServiceModel.Channels;
|
|
using System.Xml;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using WsdlNS = System.Web.Services.Description;
|
|
|
|
public class WsdlEndpointConversionContext
|
|
{
|
|
|
|
readonly ServiceEndpoint endpoint;
|
|
readonly WsdlNS.Binding wsdlBinding;
|
|
readonly WsdlNS.Port wsdlPort;
|
|
readonly WsdlContractConversionContext contractContext;
|
|
|
|
readonly Dictionary<OperationDescription, WsdlNS.OperationBinding> wsdlOperationBindings;
|
|
readonly Dictionary<WsdlNS.OperationBinding, OperationDescription> operationDescriptionBindings;
|
|
readonly Dictionary<MessageDescription, WsdlNS.MessageBinding> wsdlMessageBindings;
|
|
readonly Dictionary<FaultDescription, WsdlNS.FaultBinding> wsdlFaultBindings;
|
|
readonly Dictionary<WsdlNS.MessageBinding, MessageDescription> messageDescriptionBindings;
|
|
readonly Dictionary<WsdlNS.FaultBinding, FaultDescription> faultDescriptionBindings;
|
|
|
|
internal WsdlEndpointConversionContext(WsdlContractConversionContext contractContext, ServiceEndpoint endpoint, WsdlNS.Binding wsdlBinding, WsdlNS.Port wsdlport)
|
|
{
|
|
|
|
this.endpoint = endpoint;
|
|
this.wsdlBinding = wsdlBinding;
|
|
this.wsdlPort = wsdlport;
|
|
this.contractContext = contractContext;
|
|
|
|
this.wsdlOperationBindings = new Dictionary<OperationDescription, WsdlNS.OperationBinding>();
|
|
this.operationDescriptionBindings = new Dictionary<WsdlNS.OperationBinding, OperationDescription>();
|
|
this.wsdlMessageBindings = new Dictionary<MessageDescription, WsdlNS.MessageBinding>();
|
|
this.messageDescriptionBindings = new Dictionary<WsdlNS.MessageBinding, MessageDescription>();
|
|
this.wsdlFaultBindings = new Dictionary<FaultDescription, WsdlNS.FaultBinding>();
|
|
this.faultDescriptionBindings = new Dictionary<WsdlNS.FaultBinding, FaultDescription>();
|
|
}
|
|
|
|
internal WsdlEndpointConversionContext(WsdlEndpointConversionContext bindingContext, ServiceEndpoint endpoint, WsdlNS.Port wsdlport)
|
|
{
|
|
|
|
this.endpoint = endpoint;
|
|
this.wsdlBinding = bindingContext.WsdlBinding;
|
|
this.wsdlPort = wsdlport;
|
|
this.contractContext = bindingContext.contractContext;
|
|
|
|
this.wsdlOperationBindings = bindingContext.wsdlOperationBindings;
|
|
this.operationDescriptionBindings = bindingContext.operationDescriptionBindings;
|
|
this.wsdlMessageBindings = bindingContext.wsdlMessageBindings;
|
|
this.messageDescriptionBindings = bindingContext.messageDescriptionBindings;
|
|
this.wsdlFaultBindings = bindingContext.wsdlFaultBindings;
|
|
this.faultDescriptionBindings = bindingContext.faultDescriptionBindings;
|
|
}
|
|
|
|
internal IEnumerable<IWsdlExportExtension> ExportExtensions
|
|
{
|
|
get
|
|
{
|
|
foreach (IWsdlExportExtension extension in endpoint.Behaviors.FindAll<IWsdlExportExtension>())
|
|
{
|
|
yield return extension;
|
|
}
|
|
|
|
foreach (IWsdlExportExtension extension in endpoint.Binding.CreateBindingElements().FindAll<IWsdlExportExtension>())
|
|
{
|
|
yield return extension;
|
|
}
|
|
|
|
foreach (IWsdlExportExtension extension in endpoint.Contract.Behaviors.FindAll<IWsdlExportExtension>())
|
|
{
|
|
yield return extension;
|
|
}
|
|
|
|
foreach (OperationDescription operation in endpoint.Contract.Operations)
|
|
{
|
|
if (!WsdlExporter.OperationIsExportable(operation))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// In 3.0SP1, the DCSOB and XSOB were moved from before to after the custom behaviors. For
|
|
// IWsdlExportExtension compat, run them in the pre-SP1 order.
|
|
// TEF QFE 367607
|
|
Collection<IWsdlExportExtension> extensions = operation.Behaviors.FindAll<IWsdlExportExtension>();
|
|
for (int i = 0; i < extensions.Count;)
|
|
{
|
|
if (WsdlExporter.IsBuiltInOperationBehavior(extensions[i]))
|
|
{
|
|
yield return extensions[i];
|
|
extensions.RemoveAt(i);
|
|
}
|
|
else
|
|
{
|
|
i++;
|
|
}
|
|
}
|
|
foreach (IWsdlExportExtension extension in extensions)
|
|
{
|
|
yield return extension;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public ServiceEndpoint Endpoint { get { return endpoint; } }
|
|
public WsdlNS.Binding WsdlBinding { get { return wsdlBinding; } }
|
|
public WsdlNS.Port WsdlPort { get { return wsdlPort; } }
|
|
public WsdlContractConversionContext ContractConversionContext { get { return contractContext; } }
|
|
|
|
public WsdlNS.OperationBinding GetOperationBinding(OperationDescription operation)
|
|
{
|
|
return this.wsdlOperationBindings[operation];
|
|
}
|
|
|
|
public WsdlNS.MessageBinding GetMessageBinding(MessageDescription message)
|
|
{
|
|
return this.wsdlMessageBindings[message];
|
|
}
|
|
|
|
public WsdlNS.FaultBinding GetFaultBinding(FaultDescription fault)
|
|
{
|
|
return this.wsdlFaultBindings[fault];
|
|
}
|
|
|
|
public OperationDescription GetOperationDescription(WsdlNS.OperationBinding operationBinding)
|
|
{
|
|
return this.operationDescriptionBindings[operationBinding];
|
|
}
|
|
|
|
public MessageDescription GetMessageDescription(WsdlNS.MessageBinding messageBinding)
|
|
{
|
|
return this.messageDescriptionBindings[messageBinding];
|
|
}
|
|
|
|
public FaultDescription GetFaultDescription(WsdlNS.FaultBinding faultBinding)
|
|
{
|
|
return this.faultDescriptionBindings[faultBinding];
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------------------------
|
|
|
|
internal void AddOperationBinding(OperationDescription operationDescription, WsdlNS.OperationBinding wsdlOperationBinding)
|
|
{
|
|
this.wsdlOperationBindings.Add(operationDescription, wsdlOperationBinding);
|
|
this.operationDescriptionBindings.Add(wsdlOperationBinding, operationDescription);
|
|
}
|
|
|
|
internal void AddMessageBinding(MessageDescription messageDescription, WsdlNS.MessageBinding wsdlMessageBinding)
|
|
{
|
|
this.wsdlMessageBindings.Add(messageDescription, wsdlMessageBinding);
|
|
this.messageDescriptionBindings.Add(wsdlMessageBinding, messageDescription);
|
|
}
|
|
|
|
internal void AddFaultBinding(FaultDescription faultDescription, WsdlNS.FaultBinding wsdlFaultBinding)
|
|
{
|
|
this.wsdlFaultBindings.Add(faultDescription, wsdlFaultBinding);
|
|
this.faultDescriptionBindings.Add(wsdlFaultBinding, faultDescription);
|
|
}
|
|
}
|
|
|
|
}
|