Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Providers / ServiceOperation.cs / 1305376 / ServiceOperation.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Provides a type to represent custom operations on services.
//
//
// @owner [....]
//---------------------------------------------------------------------
namespace System.Data.Services.Providers
{
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
/// Use this class to represent a custom service operation.
[DebuggerVisualizer("ServiceOperation={Name}")]
public class ServiceOperation
{
/// Protocol (for example HTTP) method the service operation responds to.
private readonly string method;
/// In-order parameters for this operation.
private readonly ReadOnlyCollection parameters;
/// Kind of result expected from this operation.
private readonly ServiceOperationResultKind resultKind;
/// Type of element of the method result.
private readonly ResourceType resultType;
/// Empty parameter collection.
private static ReadOnlyCollection emptyParameterCollection = new ReadOnlyCollection(new ServiceOperationParameter[0]);
/// MIME type specified on primitive results, possibly null.
private string mimeType;
/// Entity set from which entities are read, if applicable.
private ResourceSet resourceSet;
/// name of the service operation.
private string name;
/// Is true, if the service operation is set to readonly i.e. fully initialized and validated. No more changes can be made,
/// after the service operation is set to readonly.
private bool isReadOnly;
///
/// Initializes a new instance.
///
/// name of the service operation.
/// Kind of result expected from this operation.
/// Type of element of the method result.
/// EntitySet of the result expected from this operation.
/// Protocol (for example HTTP) method the service operation responds to.
/// In-order parameters for this operation.
public ServiceOperation(
string name,
ServiceOperationResultKind resultKind,
ResourceType resultType,
ResourceSet resultSet,
string method,
IEnumerable parameters)
{
WebUtil.CheckStringArgumentNull(name, "name");
WebUtil.CheckServiceOperationResultKind(resultKind, "resultKind");
WebUtil.CheckStringArgumentNull(method, "method");
if ((resultKind == ServiceOperationResultKind.Void && resultType != null) ||
(resultKind != ServiceOperationResultKind.Void && resultType == null))
{
throw new ArgumentException(Strings.ServiceOperation_ResultTypeAndKindMustMatch("resultKind", "resultType", ServiceOperationResultKind.Void));
}
if ((resultType == null || resultType.ResourceTypeKind != ResourceTypeKind.EntityType) && resultSet != null)
{
throw new ArgumentException(Strings.ServiceOperation_ResultSetMustBeNull("resultSet", "resultType"));
}
if (resultType != null && resultType.ResourceTypeKind == ResourceTypeKind.EntityType && (resultSet == null || !resultSet.ResourceType.IsAssignableFrom(resultType)))
{
throw new ArgumentException(Strings.ServiceOperation_ResultTypeAndResultSetMustMatch("resultType", "resultSet"));
}
if (method != XmlConstants.HttpMethodGet && method != XmlConstants.HttpMethodPost)
{
throw new ArgumentException(Strings.ServiceOperation_NotSupportedProtocolMethod(method, name));
}
this.name = name;
this.resultKind = resultKind;
this.resultType = resultType;
this.resourceSet = resultSet;
this.method = method;
if (parameters == null)
{
this.parameters = ServiceOperation.emptyParameterCollection;
}
else
{
this.parameters = new ReadOnlyCollection(new List(parameters));
HashSet paramNames = new HashSet(StringComparer.Ordinal);
foreach (ServiceOperationParameter p in this.parameters)
{
if (!paramNames.Add(p.Name))
{
throw new ArgumentException(Strings.ServiceOperation_DuplicateParameterName(p.Name), "parameters");
}
}
}
}
/// Protocol (for example HTTP) method the service operation responds to.
public string Method
{
get { return this.method; }
}
/// MIME type specified on primitive results, possibly null.
public string MimeType
{
get
{
return this.mimeType;
}
set
{
this.ThrowIfSealed();
if (String.IsNullOrEmpty(value))
{
throw new InvalidOperationException(Strings.ServiceOperation_MimeTypeCannotBeEmpty(this.Name));
}
if (!WebUtil.IsValidMimeType(value))
{
throw new InvalidOperationException(Strings.ServiceOperation_MimeTypeNotValid(value, this.Name));
}
this.mimeType = value;
}
}
/// Name of the service operation.
public string Name
{
get { return this.name; }
}
/// Returns all the parameters for the given service operations.///
public ReadOnlyCollection Parameters
{
get { return this.parameters; }
}
/// Kind of result expected from this operation.
public ServiceOperationResultKind ResultKind
{
get { return this.resultKind; }
}
/// Element of result type.
///
/// Note that if the method returns an IEnumerable<string>,
/// this property will be typeof(string).
///
public ResourceType ResultType
{
get { return this.resultType; }
}
///
/// PlaceHolder to hold custom state information about service operation.
///
public object CustomState
{
get;
set;
}
///
/// Returns true, if this service operation has been set to read only. Otherwise returns false.
///
public bool IsReadOnly
{
get { return this.isReadOnly; }
}
/// Entity set from which entities are read (possibly null).
public ResourceSet ResourceSet
{
get { return this.resourceSet; }
}
///
/// Set this service operation to readonly.
///
public void SetReadOnly()
{
if (this.isReadOnly)
{
return;
}
foreach (ServiceOperationParameter parameter in this.Parameters)
{
parameter.SetReadOnly();
}
this.isReadOnly = true;
}
///
/// Throws an InvalidOperationException if this service operation is already set to readonly.
///
internal void ThrowIfSealed()
{
if (this.isReadOnly)
{
throw new InvalidOperationException(Strings.ServiceOperation_Sealed(this.Name));
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlJsonWriter.cs
- XmlSerializationGeneratedCode.cs
- OdbcDataReader.cs
- CachedPathData.cs
- StatusBarDrawItemEvent.cs
- StringArrayConverter.cs
- OracleSqlParser.cs
- SrgsDocument.cs
- InitializationEventAttribute.cs
- itemelement.cs
- RouteValueDictionary.cs
- PeerUnsafeNativeMethods.cs
- StaticSiteMapProvider.cs
- TreeNodeMouseHoverEvent.cs
- MexBindingBindingCollectionElement.cs
- DigitalSignature.cs
- Point.cs
- CodePageEncoding.cs
- ClockController.cs
- StateItem.cs
- BindingContext.cs
- ComponentChangingEvent.cs
- DependencyObjectType.cs
- StringComparer.cs
- DateTimeOffset.cs
- ManageRequest.cs
- DataGridViewBand.cs
- ProtocolReflector.cs
- ToReply.cs
- PerformanceCounterPermission.cs
- Visual3DCollection.cs
- XmlHelper.cs
- ContextStaticAttribute.cs
- PasswordDeriveBytes.cs
- XMLSyntaxException.cs
- IssuanceLicense.cs
- Debug.cs
- _AutoWebProxyScriptWrapper.cs
- DataRelationPropertyDescriptor.cs
- CodeConstructor.cs
- CodeDirectoryCompiler.cs
- TimelineGroup.cs
- DrawListViewSubItemEventArgs.cs
- QilScopedVisitor.cs
- TextTreePropertyUndoUnit.cs
- FrameDimension.cs
- xmlformatgeneratorstatics.cs
- ArgumentOutOfRangeException.cs
- CorrelationManager.cs
- BindingCollection.cs
- XamlTypeMapper.cs
- WebColorConverter.cs
- XmlTextEncoder.cs
- BaseValidatorDesigner.cs
- SqlErrorCollection.cs
- EntityContainer.cs
- ObjectStateFormatter.cs
- HtmlInputRadioButton.cs
- DbXmlEnabledProviderManifest.cs
- SettingsProperty.cs
- ProjectionPlanCompiler.cs
- CmsUtils.cs
- ObjectListGeneralPage.cs
- FilterQuery.cs
- SiteMapSection.cs
- PeerObject.cs
- SQLMoney.cs
- EntityCommandDefinition.cs
- TaskSchedulerException.cs
- PTManager.cs
- RelationalExpressions.cs
- PageStatePersister.cs
- RequestStatusBarUpdateEventArgs.cs
- WindowsListView.cs
- log.cs
- ToolStripItemClickedEventArgs.cs
- DrawListViewColumnHeaderEventArgs.cs
- AssemblyAttributes.cs
- ParsedAttributeCollection.cs
- HandlerFactoryWrapper.cs
- StringUtil.cs
- ValidationErrorInfo.cs
- TypeElementCollection.cs
- ProcessManager.cs
- SmtpMail.cs
- NavigatorInvalidBodyAccessException.cs
- _ListenerResponseStream.cs
- DetailsViewUpdatedEventArgs.cs
- ColorTransformHelper.cs
- AlternateViewCollection.cs
- Canvas.cs
- SamlAssertion.cs
- Debug.cs
- httpstaticobjectscollection.cs
- DataGridViewColumnEventArgs.cs
- BindingMAnagerBase.cs
- TabItemWrapperAutomationPeer.cs
- _DynamicWinsockMethods.cs
- ProxyWebPart.cs
- validation.cs