58 lines
2.5 KiB
C#
58 lines
2.5 KiB
C#
|
//------------------------------------------------------------
|
|||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|||
|
//------------------------------------------------------------
|
|||
|
namespace System.ServiceModel.Description
|
|||
|
{
|
|||
|
using System.Xml.Linq;
|
|||
|
using System.Xml;
|
|||
|
using System.Text;
|
|||
|
using System.Runtime.Serialization;
|
|||
|
using System.ServiceModel.Description;
|
|||
|
using System.Reflection;
|
|||
|
|
|||
|
public static class ParameterXPathQueryGenerator
|
|||
|
{
|
|||
|
const string XPathSeparator = "/";
|
|||
|
const string NsSeparator = ":";
|
|||
|
const string ServiceContractPrefix = "xgSc";
|
|||
|
|
|||
|
public static string CreateFromDataContractSerializer(XName serviceContractName, string operationName, string parameterName, bool isReply, Type type, MemberInfo[] pathToMember, out XmlNamespaceManager namespaces)
|
|||
|
{
|
|||
|
if (type == null)
|
|||
|
{
|
|||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("type"));
|
|||
|
}
|
|||
|
if (pathToMember == null)
|
|||
|
{
|
|||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("pathToMember"));
|
|||
|
}
|
|||
|
if (operationName == null)
|
|||
|
{
|
|||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("operationName"));
|
|||
|
}
|
|||
|
if (serviceContractName == null)
|
|||
|
{
|
|||
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("serviceContractName"));
|
|||
|
}
|
|||
|
if (isReply)
|
|||
|
{
|
|||
|
operationName += TypeLoader.ResponseSuffix;
|
|||
|
}
|
|||
|
|
|||
|
StringBuilder xPathBuilder = new StringBuilder(XPathSeparator + ServiceContractPrefix + NsSeparator + operationName);
|
|||
|
xPathBuilder.Append(XPathSeparator + ServiceContractPrefix + NsSeparator + parameterName);
|
|||
|
|
|||
|
string xpath = XPathQueryGenerator.CreateFromDataContractSerializer(type, pathToMember, xPathBuilder, out namespaces);
|
|||
|
string serviceContractNamespace = serviceContractName.NamespaceName;
|
|||
|
// Use default service contract namespace if the provided serviceContractNamespace is null or empty
|
|||
|
if (string.IsNullOrEmpty(serviceContractNamespace))
|
|||
|
{
|
|||
|
serviceContractNamespace = NamingHelper.DefaultNamespace;
|
|||
|
}
|
|||
|
namespaces.AddNamespace(ServiceContractPrefix, serviceContractNamespace);
|
|||
|
|
|||
|
return xpath;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|