internal static string GetClientProxyScript(HttpContext context) {
            WebServiceData webServiceData = WebServiceData.GetWebServiceData(context, context.Request.FilePath);
            DateTime lastModifiedDate = GetAssemblyModifiedTime(webServiceData.TypeData.Type.Assembly);

            // If the browser sent this header, we can check if we need to resend
            string modifiedSince = context.Request.Headers["If-Modified-Since"];
            if (modifiedSince != null) {
                DateTime header;
                if (DateTime.TryParse(modifiedSince, out header)) {
                    // We are done if the assembly hasn't been modified
                    if (header >= lastModifiedDate) {
                        context.Response.StatusCode = 304;
                        return null;
                    }
                }
            }
            bool debug = RestHandlerFactory.IsClientProxyDebugRequest(context.Request.PathInfo);
            // Only cache for release proxy script (/js)
            if (!debug) {
                // Only cache if we get a reasonable last modified date
                if (lastModifiedDate.ToUniversalTime() < DateTime.UtcNow) {
                    // Cache the resource so we don't keep processing the same requests
                    HttpCachePolicy cachePolicy = context.Response.Cache;
                    cachePolicy.SetCacheability(HttpCacheability.Public);
                    cachePolicy.SetLastModified(lastModifiedDate);
                    // expires is necessary so that the browser at least does an If-Modified-Since request on every request.
                    // without that, the browser wouldn't request a new proxy until the user hits refresh.
                    // Use one year ago to reasonably ensure "past" interpretation
                    cachePolicy.SetExpires(lastModifiedDate.AddYears(-1));
                }
            }

            WebServiceClientProxyGenerator proxyGenerator = new WebServiceClientProxyGenerator(context.Request.FilePath, debug);
            return proxyGenerator.GetClientProxyScript(webServiceData);
        }
Beispiel #2
0
        // Called by ScriptManager to generate the proxy inline
        internal static string GetInlineClientProxyScript(string path, HttpContext context, bool debug)
        {
            WebServiceData webServiceData = WebServiceData.GetWebServiceData(context, path, true, false, true);
            WebServiceClientProxyGenerator proxyGenerator = new WebServiceClientProxyGenerator(path, debug);

            return(proxyGenerator.GetClientProxyScript(webServiceData));
        }
        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));
        }
Beispiel #4
0
        internal static string GetClientProxyScript(HttpContext context)
        {
            WebServiceData webServiceData   = WebServiceData.GetWebServiceData(context, context.Request.FilePath);
            DateTime       lastModifiedDate = GetAssemblyModifiedTime(webServiceData.TypeData.Type.Assembly);

            // If the browser sent this header, we can check if we need to resend
            string modifiedSince = context.Request.Headers["If-Modified-Since"];

            if (modifiedSince != null)
            {
                DateTime header;
                if (DateTime.TryParse(modifiedSince, out header))
                {
                    // We are done if the assembly hasn't been modified
                    if (header >= lastModifiedDate)
                    {
                        context.Response.StatusCode = 304;
                        return(null);
                    }
                }
            }
            bool debug = RestHandlerFactory.IsClientProxyDebugRequest(context.Request.PathInfo);

            // Only cache for release proxy script (/js)
            if (!debug)
            {
                // Only cache if we get a reasonable last modified date
                if (lastModifiedDate.ToUniversalTime() < DateTime.UtcNow)
                {
                    // Cache the resource so we don't keep processing the same requests
                    HttpCachePolicy cachePolicy = context.Response.Cache;
                    cachePolicy.SetCacheability(HttpCacheability.Public);
                    cachePolicy.SetLastModified(lastModifiedDate);
                    // expires is necessary so that the browser at least does an If-Modified-Since request on every request.
                    // without that, the browser wouldn't request a new proxy until the user hits refresh.
                    // Use one year ago to reasonably ensure "past" interpretation
                    cachePolicy.SetExpires(lastModifiedDate.AddYears(-1));
                }
            }

            WebServiceClientProxyGenerator proxyGenerator = new WebServiceClientProxyGenerator(context.Request.FilePath, debug);

            return(proxyGenerator.GetClientProxyScript(webServiceData));
        }
        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);
        }
 // Called by ScriptManager to generate the proxy inline
 internal static string GetInlineClientProxyScript(string path, HttpContext context, bool debug) {
     WebServiceData webServiceData = WebServiceData.GetWebServiceData(context, path, true, false, true);
     WebServiceClientProxyGenerator proxyGenerator = new WebServiceClientProxyGenerator(path, debug);
     return proxyGenerator.GetClientProxyScript(webServiceData);
 }