/// <summary>Determines the type and method name of the method associated with the specified SOAPAction value.</summary>
/// <returns>true if the type and method name were successfully recovered; otherwise, false.</returns>
/// <param name="soapAction">The SOAPAction of the method for which the type and method names were requested. </param>
/// <param name="typeName">When this method returns, contains a <see cref="T:System.String" /> that holds the type name of the method in question. This parameter is passed uninitialized. </param>
/// <param name="methodName">When this method returns, contains a <see cref="T:System.String" /> that holds the method name of the method in question. This parameter is passed uninitialized. </param>
/// <exception cref="T:System.Runtime.Remoting.RemotingException">The SOAPAction value does not start and end with quotes. </exception>
/// <exception cref="T:System.Security.SecurityException">The immediate caller does not have infrastructure permission. </exception>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Infrastructure" />
/// </PermissionSet>
public static bool GetTypeAndMethodNameFromSoapAction(string soapAction, out string typeName, out string methodName)
{
object syncRoot = SoapServices._soapActions.SyncRoot;
lock (syncRoot)
{
MethodBase methodBase = (MethodBase)SoapServices._soapActionsMethods[soapAction];
if (methodBase != null)
{
typeName = methodBase.DeclaringType.AssemblyQualifiedName;
methodName = methodBase.Name;
return(true);
}
}
typeName = null;
methodName = null;
int num = soapAction.LastIndexOf('#');
if (num == -1)
{
return(false);
}
methodName = soapAction.Substring(num + 1);
string str;
string text;
if (!SoapServices.DecodeXmlNamespaceForClrTypeNamespace(soapAction.Substring(0, num), out str, out text))
{
return(false);
}
if (text == null)
{
typeName = str + ", " + typeof(object).Assembly.GetName().Name;
}
else
{
typeName = str + ", " + text;
}
return(true);
}