Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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. // //----------------------------------------------------------------------------- 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DefaultAsyncDataDispatcher.cs
- FixedSOMPage.cs
- CacheRequest.cs
- xdrvalidator.cs
- PageThemeCodeDomTreeGenerator.cs
- XmlWrappingReader.cs
- XmlValidatingReader.cs
- XmlSchemaIdentityConstraint.cs
- WindowsBrush.cs
- PropertyToken.cs
- DataGridViewElement.cs
- TypePresenter.xaml.cs
- DataService.cs
- MemberMaps.cs
- FacetValueContainer.cs
- StaticExtension.cs
- BitmapEffectGroup.cs
- GlobalAllocSafeHandle.cs
- BaseParser.cs
- DataGridViewRowHeaderCell.cs
- ClearCollection.cs
- XsltSettings.cs
- MatrixCamera.cs
- Vector3DKeyFrameCollection.cs
- FixedSOMLineCollection.cs
- DynamicResourceExtensionConverter.cs
- TreeViewAutomationPeer.cs
- XmlSchemaAnnotation.cs
- InteropAutomationProvider.cs
- EntityModelSchemaGenerator.cs
- HTMLTagNameToTypeMapper.cs
- templategroup.cs
- CompositeControl.cs
- CodeMemberMethod.cs
- StateManagedCollection.cs
- SecurityResources.cs
- XmlWhitespace.cs
- StringConverter.cs
- ExpressionParser.cs
- XmlQueryOutput.cs
- ConnectorMovedEventArgs.cs
- TextStore.cs
- ServicePoint.cs
- EllipseGeometry.cs
- MenuCommands.cs
- EventWaitHandleSecurity.cs
- UseLicense.cs
- IpcClientManager.cs
- LazyTextWriterCreator.cs
- CompilationLock.cs
- PrintPreviewControl.cs
- EmptyStringExpandableObjectConverter.cs
- FixedPageProcessor.cs
- DocumentPage.cs
- CodeDomSerializerBase.cs
- Point3DAnimationUsingKeyFrames.cs
- SchemaImporterExtensionElementCollection.cs
- ResourceDictionaryCollection.cs
- Queue.cs
- initElementDictionary.cs
- ActiveXSite.cs
- ContainerUIElement3D.cs
- CryptoKeySecurity.cs
- ProfileServiceManager.cs
- PrinterSettings.cs
- AsyncPostBackErrorEventArgs.cs
- Sql8ExpressionRewriter.cs
- CodeVariableDeclarationStatement.cs
- DataSvcMapFile.cs
- ResourceDefaultValueAttribute.cs
- BackgroundWorker.cs
- ConditionCollection.cs
- InvokePattern.cs
- ValidateNames.cs
- EntitySqlQueryCacheKey.cs
- Registry.cs
- CacheManager.cs
- AdapterDictionary.cs
- MessageQueuePermissionEntry.cs
- DesignBindingConverter.cs
- UpDownBase.cs
- ObjectSecurity.cs
- PersonalizationStateQuery.cs
- XmlEntityReference.cs
- FixedFindEngine.cs
- BindingsCollection.cs
- SqlPersistenceWorkflowInstanceDescription.cs
- ArraySegment.cs
- TemplatedMailWebEventProvider.cs
- XmlSchemaSimpleContent.cs
- isolationinterop.cs
- Logging.cs
- MSAAWinEventWrap.cs
- LazyTextWriterCreator.cs
- StrongName.cs
- TextTreeNode.cs
- ToolStripArrowRenderEventArgs.cs
- FolderBrowserDialog.cs
- DeviceContext2.cs
- KnownBoxes.cs