Code:
/ DotNET / DotNET / 8.0 / untmp / Orcas / RTM / ndp / fx / src / xsp / System / Web / Extensions / Script / Services / WebServiceMethodData.cs / 1 / WebServiceMethodData.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Web.Resources;
using System.Web.Script.Serialization;
using System.Web.Services;
namespace System.Web.Script.Services {
internal class WebServiceMethodData {
private MethodInfo _methodInfo;
private WebMethodAttribute _webMethodAttribute;
private ScriptMethodAttribute _scriptMethodAttribute;
private string _methodName;
private Dictionary _parameterData;
private WebServiceData _owner;
private bool? _useHttpGet;
internal WebServiceMethodData(WebServiceData owner, MethodInfo methodInfo, WebMethodAttribute webMethodAttribute, ScriptMethodAttribute scriptMethodAttribute) {
_owner = owner;
_methodInfo = methodInfo;
_webMethodAttribute = webMethodAttribute;
_methodName = _webMethodAttribute.MessageName;
_scriptMethodAttribute = scriptMethodAttribute;
if (String.IsNullOrEmpty(_methodName)) {
_methodName = methodInfo.Name;
}
}
// This constructor is only used by WCF. Owener, MethodName, ParameterDataDictionary, ParamterData
// are the only valid properties in WCF case.
internal WebServiceMethodData(WebServiceData owner, string methodName, Dictionary parameterData, bool useHttpGet) {
_owner = owner;
_methodName = methodName;
_parameterData = parameterData;
_useHttpGet = useHttpGet;
}
internal WebServiceData Owner {
get {
return _owner;
}
}
private void EnsureParameters() {
// Build the parameters collection on demand
if (_parameterData != null)
return;
lock (this) {
Dictionary parameterData = new Dictionary();
int index = 0;
foreach (ParameterInfo param in _methodInfo.GetParameters()) {
parameterData[param.Name] = new WebServiceParameterData(param, index);
index++;
}
_parameterData = parameterData;
}
}
internal string MethodName {
get {
return _methodName;
}
}
internal MethodInfo MethodInfo {
get {
return _methodInfo;
}
}
internal IDictionary ParameterDataDictionary {
get {
EnsureParameters();
return _parameterData;
}
}
internal ICollection ParameterDatas {
get {
return ParameterDataDictionary.Values;
}
}
internal int CacheDuration {
get {
Debug.Assert(_webMethodAttribute != null); // If fails: WebserviceMethodData corrosponding to WCF is being used by ASMX JSON handler
return _webMethodAttribute.CacheDuration;
}
}
internal bool RequiresSession {
get {
Debug.Assert(_webMethodAttribute != null); // If fails: WebserviceMethodData corrosponding to WCF is being used by ASMX JSON handler
return _webMethodAttribute.EnableSession;
}
}
internal bool IsStatic {
get {
Debug.Assert(_methodInfo != null); // If fails: WebserviceMethodData corrosponding to WCF is being used by ASMX JSON handler
return _methodInfo.IsStatic;
}
}
internal Type ReturnType {
get {
Debug.Assert(_methodInfo != null); // If fails: WebserviceMethodData corrosponding to WCF is being used by ASMX JSON handler
return (_methodInfo == null) ? null : _methodInfo.ReturnType;
}
}
internal bool UseXmlResponse {
get {
if (_scriptMethodAttribute != null) {
return _scriptMethodAttribute.ResponseFormat == ResponseFormat.Xml;
}
return false;
}
}
internal bool XmlSerializeString {
get {
if (_scriptMethodAttribute != null) {
return _scriptMethodAttribute.XmlSerializeString;
}
return false;
}
}
internal bool UseGet {
get {
if (_useHttpGet != null) {
return _useHttpGet.Value;
}
if (_scriptMethodAttribute != null) {
return _scriptMethodAttribute.UseHttpGet;
}
return false;
}
}
internal object CallMethodFromRawParams(object target, IDictionary parameters) {
// Process the 'raw' parameters so that we use strongly typed objects when possible
parameters = StrongTypeParameters(parameters);
return CallMethod(target, parameters);
}
private object CallMethod(object target, IDictionary parameters) {
// Make sure we have all the data about this method's parameters
EnsureParameters();
// Allocate an object array for all the formal parameters (whether passed in or not)
object[] actualParams = new object[_parameterData.Count];
// Go through all the actual parameters
foreach (WebServiceParameterData paramData in _parameterData.Values) {
object value;
if (parameters.TryGetValue(paramData.ParameterInfo.Name, out value)) {
actualParams[paramData.Index] = value;
}
else {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.WebService_MissingArg, paramData.ParameterInfo.Name));
}
}
// Make the actual method call
return _methodInfo.Invoke(target, actualParams);
}
private IDictionary StrongTypeParameters(IDictionary rawParams) {
Debug.Assert(ParameterDataDictionary != null);
IDictionary paramDataDictionary = ParameterDataDictionary;
// Allocate a dictionary to hold the processed parameters.
IDictionary result = new Dictionary(rawParams.Count);
// Go through all the raw parameters
foreach (KeyValuePair pair in rawParams) {
string memberName = pair.Key;
if (paramDataDictionary.ContainsKey(memberName)) {
// Get the type of the formal parameter
Type paramType = paramDataDictionary[memberName].ParameterInfo.ParameterType;
// Convert the raw parameter based on that type
result[memberName] = ObjectConverter.ConvertObjectToType(pair.Value, paramType, Owner.Serializer);
}
}
return result;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AmbientValueAttribute.cs
- TextEditorCharacters.cs
- RSACryptoServiceProvider.cs
- Size3DValueSerializer.cs
- SqlProviderServices.cs
- SetterBaseCollection.cs
- EpmAttributeNameBuilder.cs
- FrameworkRichTextComposition.cs
- UnsafePeerToPeerMethods.cs
- AnnotationHelper.cs
- HttpListenerElement.cs
- CompoundFileDeflateTransform.cs
- CommentEmitter.cs
- ValidatorAttribute.cs
- ComponentChangingEvent.cs
- ReadOnlyActivityGlyph.cs
- TypefaceCollection.cs
- MarkupCompiler.cs
- ColumnHeaderConverter.cs
- Command.cs
- BigInt.cs
- ExpressionQuoter.cs
- OdbcUtils.cs
- EntityCommandCompilationException.cs
- Math.cs
- OdbcErrorCollection.cs
- DispatcherOperation.cs
- ServiceMemoryGates.cs
- RemoteWebConfigurationHostStream.cs
- ColorContextHelper.cs
- ChannelOptions.cs
- PtsPage.cs
- DataTable.cs
- httpstaticobjectscollection.cs
- PolicyImporterElementCollection.cs
- ReadOnlyHierarchicalDataSource.cs
- __ComObject.cs
- RelatedCurrencyManager.cs
- DesignerAttribute.cs
- TextEditor.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- IconHelper.cs
- documentsequencetextpointer.cs
- BitArray.cs
- ListViewItemEventArgs.cs
- UpdateRecord.cs
- TypeLoadException.cs
- SspiWrapper.cs
- PropertyEmitter.cs
- ErrorRuntimeConfig.cs
- ScrollBar.cs
- X509ServiceCertificateAuthentication.cs
- IncrementalCompileAnalyzer.cs
- EncoderReplacementFallback.cs
- ExpressionBindingCollection.cs
- CheckBoxList.cs
- FindCriteria11.cs
- FeatureSupport.cs
- RootBuilder.cs
- Compiler.cs
- Composition.cs
- MemoryStream.cs
- ResourceIDHelper.cs
- ReaderOutput.cs
- KeyGestureConverter.cs
- Preprocessor.cs
- UserControlCodeDomTreeGenerator.cs
- XmlValueConverter.cs
- WsatProxy.cs
- CookielessHelper.cs
- MaterialCollection.cs
- TextParagraphCache.cs
- CodeDelegateCreateExpression.cs
- XmlSchemaAttribute.cs
- CalendarAutomationPeer.cs
- RuleAttributes.cs
- EntityDataSourceDataSelection.cs
- OleDbMetaDataFactory.cs
- UpdateTracker.cs
- SweepDirectionValidation.cs
- MouseDevice.cs
- SettingsPropertyValue.cs
- SQLByteStorage.cs
- HttpClientProtocol.cs
- DataGridViewIntLinkedList.cs
- OutputCacheSection.cs
- WithParamAction.cs
- UnitySerializationHolder.cs
- PersonalizationProviderCollection.cs
- PartialTrustHelpers.cs
- WebDescriptionAttribute.cs
- SelectionRange.cs
- GestureRecognitionResult.cs
- SerialStream.cs
- DesignerCommandAdapter.cs
- FlowPosition.cs
- RichTextBoxConstants.cs
- CompletionBookmark.cs
- PlanCompiler.cs
- ErrorsHelper.cs