119 lines
4.6 KiB
C#
119 lines
4.6 KiB
C#
|
//----------------------------------------------------------------
|
|||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|||
|
//----------------------------------------------------------------
|
|||
|
|
|||
|
namespace System.ServiceModel.Routing
|
|||
|
{
|
|||
|
using System;
|
|||
|
using System.ServiceModel;
|
|||
|
using System.ServiceModel.Channels;
|
|||
|
using System.ServiceModel.Description;
|
|||
|
using System.Transactions;
|
|||
|
using SR2 = System.ServiceModel.Routing.SR;
|
|||
|
using System.Runtime;
|
|||
|
|
|||
|
static class RoutingUtilities
|
|||
|
{
|
|||
|
internal const string RoutingNamespace = "http://schemas.microsoft.com/netfx/2009/05/routing";
|
|||
|
|
|||
|
internal static void Abort(ICommunicationObject commObj, object identifier)
|
|||
|
{
|
|||
|
if (TD.RoutingServiceAbortingChannelIsEnabled())
|
|||
|
{
|
|||
|
TD.RoutingServiceAbortingChannel(identifier != null ? identifier.ToString() : string.Empty);
|
|||
|
}
|
|||
|
|
|||
|
//The Exception contract for ICommunicationObject.Abort is to never throw, anything else is a fatal error.
|
|||
|
commObj.Abort();
|
|||
|
}
|
|||
|
|
|||
|
internal static bool IsMessageUsingWSSecurity(UnderstoodHeaders understoodHeaders)
|
|||
|
{
|
|||
|
foreach (MessageHeaderInfo headerInfo in understoodHeaders)
|
|||
|
{
|
|||
|
if (string.Equals(headerInfo.Namespace, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", StringComparison.Ordinal) || //wsu
|
|||
|
string.Equals(headerInfo.Namespace, "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", StringComparison.Ordinal) || //wsse
|
|||
|
string.Equals(headerInfo.Namespace, "http://docs.oasis-open.org/wss/oasis-wss-wsecurity-secext-1.1.xsd", StringComparison.Ordinal)) //wsse11
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
internal static string GetAddressingNamespace(AddressingVersion addressing)
|
|||
|
{
|
|||
|
string ns;
|
|||
|
if (addressing == AddressingVersion.WSAddressingAugust2004)
|
|||
|
{
|
|||
|
ns = "http://schemas.xmlsoap.org/ws/2004/08/addressing";
|
|||
|
}
|
|||
|
else if (addressing == AddressingVersion.WSAddressing10)
|
|||
|
{
|
|||
|
ns = "http://www.w3.org/2005/08/addressing";
|
|||
|
}
|
|||
|
else if (addressing == AddressingVersion.None)
|
|||
|
{
|
|||
|
ns = "http://schemas.microsoft.com/ws/2005/05/addressing/none";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
throw FxTrace.Exception.Argument("addressing", SR2.AddressingVersionInvalid(addressing.ToString()));
|
|||
|
}
|
|||
|
return ns;
|
|||
|
}
|
|||
|
|
|||
|
internal static bool IsRoutingServiceNamespace(string contractNamespace)
|
|||
|
{
|
|||
|
return string.Equals(contractNamespace, RoutingUtilities.RoutingNamespace, StringComparison.Ordinal);
|
|||
|
}
|
|||
|
|
|||
|
internal static bool IsTransactedReceive(Binding binding, BindingParameterCollection bindingParameters)
|
|||
|
{
|
|||
|
// New school
|
|||
|
ITransactedBindingElement transactedBindingElement = binding.GetProperty<ITransactedBindingElement>(bindingParameters);
|
|||
|
if (transactedBindingElement != null)
|
|||
|
{
|
|||
|
return transactedBindingElement.TransactedReceiveEnabled;
|
|||
|
}
|
|||
|
|
|||
|
// Old School
|
|||
|
foreach (BindingElement element in binding.CreateBindingElements())
|
|||
|
{
|
|||
|
transactedBindingElement = element as ITransactedBindingElement;
|
|||
|
if (transactedBindingElement != null && transactedBindingElement.TransactedReceiveEnabled)
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
internal static void SafeRollbackTransaction(CommittableTransaction transaction)
|
|||
|
{
|
|||
|
if (transaction != null)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
transaction.Rollback();
|
|||
|
transaction.Dispose();
|
|||
|
}
|
|||
|
catch (TransactionException transactionException)
|
|||
|
{
|
|||
|
if (TD.RoutingServiceHandledExceptionIsEnabled())
|
|||
|
{
|
|||
|
TD.RoutingServiceHandledException(null, transactionException);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (ObjectDisposedException disposedException)
|
|||
|
{
|
|||
|
if (TD.RoutingServiceHandledExceptionIsEnabled())
|
|||
|
{
|
|||
|
TD.RoutingServiceHandledException(null, disposedException);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|