You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,82 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="ProxyGenerator.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.Script.Services {
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
using System.ServiceModel;
|
||||
using System.ServiceModel.Description;
|
||||
using System.Web.Resources;
|
||||
|
||||
public static class ProxyGenerator {
|
||||
|
||||
const string WCFProxyTypeName = "System.ServiceModel.Description.WCFServiceClientProxyGenerator";
|
||||
const string WCFProxyMethodName = "GetClientProxyScript";
|
||||
|
||||
public static string GetClientProxyScript(Type type, string path, bool debug) {
|
||||
return GetClientProxyScript(type, path, debug, null);
|
||||
}
|
||||
|
||||
public static string GetClientProxyScript(Type type, string path, bool debug, ServiceEndpoint serviceEndpoint) {
|
||||
if (type == null) {
|
||||
throw new ArgumentNullException("type");
|
||||
}
|
||||
if (path == null) {
|
||||
throw new ArgumentNullException("path");
|
||||
}
|
||||
WebServiceData webServiceData = null;
|
||||
ClientProxyGenerator proxyGenerator = null;
|
||||
if (IsWebServiceType(type)) {
|
||||
proxyGenerator = new WebServiceClientProxyGenerator(path, debug);
|
||||
webServiceData = new WebServiceData(type, false);
|
||||
}
|
||||
else if (IsPageType(type)) {
|
||||
proxyGenerator = new PageClientProxyGenerator(path, debug);
|
||||
webServiceData = new WebServiceData(type, true);
|
||||
}
|
||||
else if(IsWCFServiceType(type)) {
|
||||
// invoke the WCFServiceClientProxyGenerator.GetClientProxyScript method using reflection
|
||||
Assembly wcfWebAssembly = Assembly.Load(AssemblyRef.SystemServiceModelWeb);
|
||||
if (wcfWebAssembly != null) {
|
||||
Type wcfProxyType = wcfWebAssembly.GetType(WCFProxyTypeName);
|
||||
if (wcfProxyType != null) {
|
||||
MethodInfo getClientProxyMethod = wcfProxyType.GetMethod(WCFProxyMethodName, BindingFlags.Static | BindingFlags.NonPublic);
|
||||
if (getClientProxyMethod != null) {
|
||||
return getClientProxyMethod.Invoke(null, new object[] { type, path, debug, serviceEndpoint }) as string;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// in case the reflection fails, we should throw unsupported exception
|
||||
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture,
|
||||
AtlasWeb.ProxyGenerator_UnsupportedType,
|
||||
type.FullName));
|
||||
}
|
||||
else {
|
||||
throw new ArgumentException(String.Format(CultureInfo.CurrentCulture,
|
||||
AtlasWeb.ProxyGenerator_UnsupportedType,
|
||||
type.FullName));
|
||||
}
|
||||
return proxyGenerator.GetClientProxyScript(webServiceData);
|
||||
}
|
||||
|
||||
private static bool IsPageType(Type type) {
|
||||
return typeof(System.Web.UI.Page).IsAssignableFrom(type);
|
||||
}
|
||||
|
||||
private static bool IsWCFServiceType(Type type) {
|
||||
object[] attribs = type.GetCustomAttributes(typeof(ServiceContractAttribute), true);
|
||||
return (attribs.Length != 0);
|
||||
}
|
||||
|
||||
private static bool IsWebServiceType(Type type) {
|
||||
object[] attribs = type.GetCustomAttributes(typeof(ScriptServiceAttribute), true);
|
||||
return (attribs.Length != 0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user