威尼斯人线上娱乐

【威尼斯人线上娱乐】动态编写翻译,内置函数

15 4月 , 2019  

伊始产生c#代码的在线编辑。    

在帮客户写JAVA客户端访问.NET达成的Web
service的以身作则代码发现了三个有意思的标题。为有保持安全性,使用了wse贰.0
sp二的ws-security,自身完成了UsernameTokenManager的AuthenticateToken方法。当从本机的浏览器访问该服务时,重回HTTP
500破绽百出。写了二个winform客户端的测试代码,当使用不正确的用户名与密码时,服务抛出荒唐,使用科学的用户名与密码时,服务重回正确的结果,壹切看起来都很正常。但当使用java的客户端访问时,无论使用什么的客户名与密码,服务均能科学再次来到结果。不了解是或不是WSE二.0的bug依然安装的主题素材,让jeet十分抑郁。
演示代码如下:
1、WEB service代码:

  未来也触及一下动态编写翻译吧!2018年也闻讯过了,可是只瞄了一眼,没去执行,不久前有同事在介绍动态编写翻译,那时小编因为有个别原因无法去听取。未来就看一下

Build-in Functionis
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() __import()__
complex() hasattr() max() round()
delattr() hash() memoryview() set()

威尼斯人线上娱乐 1

威尼斯人线上娱乐 2using System;
威尼斯人线上娱乐 3using System.Collections;
威尼斯人线上娱乐 4using System.ComponentModel;
威尼斯人线上娱乐 5using System.Data;
威尼斯人线上娱乐 6using System.Diagnostics;
威尼斯人线上娱乐 7using System.Web;
威尼斯人线上娱乐 8using System.Web.Services;
威尼斯人线上娱乐 9using System.Web.Services.Protocols;
威尼斯人线上娱乐 10using Microsoft.Web.Services2;
威尼斯人线上娱乐 11using Microsoft.Web.Services2.Security;
威尼斯人线上娱乐 12using Microsoft.Web.Services2.Security.Tokens;
威尼斯人线上娱乐 13
威尼斯人线上娱乐 14namespace WebTest
威尼斯人线上娱乐 15威尼斯人线上娱乐 16威尼斯人线上娱乐 17{
威尼斯人线上娱乐 18威尼斯人线上娱乐 19    /**//// <summary>
威尼斯人线上娱乐 20    /// SumService 的摘要表达。
威尼斯人线上娱乐 21    /// </summary>
威尼斯人线上娱乐 22    public class SumService : System.Web.Services.WebService
威尼斯人线上娱乐 23威尼斯人线上娱乐 24    威尼斯人线上娱乐 25{
威尼斯人线上娱乐 26        public SumService()
威尼斯人线上娱乐 27威尼斯人线上娱乐 28        威尼斯人线上娱乐 29{
威尼斯人线上娱乐 30            //CODEGEN: 该调用是 ASP.NET Web 服务设计器所不可缺少的
威尼斯人线上娱乐 31            InitializeComponent();
威尼斯人线上娱乐 32        }
威尼斯人线上娱乐 33
威尼斯人线上娱乐 34威尼斯人线上娱乐 35        组件设计器生成的代码#region 组件设计器生成的代码
威尼斯人线上娱乐 36        
威尼斯人线上娱乐 37        //Web 服务设计器所必备的
威尼斯人线上娱乐 38        private IContainer components = null;
威尼斯人线上娱乐 39                
威尼斯人线上娱乐 40威尼斯人线上娱乐 41        /**//// <summary>
威尼斯人线上娱乐 42        /// 设计器协助所需的法子 – 不要选用代码编辑器修改
威尼斯人线上娱乐 43        /// 此格局的故事情节。
威尼斯人线上娱乐 44        /// </summary>
威尼斯人线上娱乐 45        private void InitializeComponent()
威尼斯人线上娱乐 46威尼斯人线上娱乐 47        威尼斯人线上娱乐 48{
威尼斯人线上娱乐 49        }
威尼斯人线上娱乐 50
威尼斯人线上娱乐 51威尼斯人线上娱乐 52        /**//// <summary>
威尼斯人线上娱乐 53        /// 清理全数正在利用的资源。
威尼斯人线上娱乐 54        /// </summary>
威尼斯人线上娱乐 55        protected override void Dispose( bool disposing )
威尼斯人线上娱乐 56威尼斯人线上娱乐 57        威尼斯人线上娱乐 58{
威尼斯人线上娱乐 59            if(disposing && components != null)
威尼斯人线上娱乐 60威尼斯人线上娱乐 61            威尼斯人线上娱乐 62{
威尼斯人线上娱乐 63                components.Dispose();
威尼斯人线上娱乐 64            }
威尼斯人线上娱乐 65            base.Dispose(disposing);        
威尼斯人线上娱乐 66        }
威尼斯人线上娱乐 67        
威尼斯人线上娱乐 68        #endregion
威尼斯人线上娱乐 69
威尼斯人线上娱乐 70        // WEB 服务示范
威尼斯人线上娱乐 71        // HelloWorld() 示例服务再次回到字符串 Hello World
威尼斯人线上娱乐 72        // 若要转移,请打消注释下列行,然后保留并扭转项目
威尼斯人线上娱乐 73        // 若要测试此 Web 服务,请按 F5 键
威尼斯人线上娱乐 74//
威尼斯人线上娱乐 75        [WebMethod]
威尼斯人线上娱乐 76        public string HelloWorld()
威尼斯人线上娱乐 77威尼斯人线上娱乐 78        威尼斯人线上娱乐 79{
威尼斯人线上娱乐 80            SoapContext requestContext=RequestSoapContext.Current;
威尼斯人线上娱乐 81            if(requestContext==null)
威尼斯人线上娱乐 82                throw new ApplicationException(“Only soap request are permitted.”);
威尼斯人线上娱乐 83            return “Hello World.”;
威尼斯人线上娱乐 84        }
威尼斯人线上娱乐 85        [SoapRpcMethod(Action=”]
威尼斯人线上娱乐 86        [WebMethod]
威尼斯人线上娱乐 87        public int IntAdd(int a,int b)
威尼斯人线上娱乐 88威尼斯人线上娱乐 89        威尼斯人线上娱乐 90{
威尼斯人线上娱乐 91            SoapContext requestContext=RequestSoapContext.Current;
威尼斯人线上娱乐 92            
威尼斯人线上娱乐 93            if(requestContext==null)
威尼斯人线上娱乐 94                throw new ApplicationException(“Only soap request are permitted.”);
威尼斯人线上娱乐 95            
威尼斯人线上娱乐 96
威尼斯人线上娱乐 97            return a+b;
威尼斯人线上娱乐 98        }
威尼斯人线上娱乐 99
威尼斯人线上娱乐 100        
威尼斯人线上娱乐 101    }
威尼斯人线上娱乐 102    }
威尼斯人线上娱乐 103

  整个编写翻译进程最中央用到七个类CodeDomProvider类和CompilerParameters
类。前者就出任2个编写翻译器,后者则是用以记录传递给编写翻译器的局地参数。在最初学习C#的使用,鄙人未有用得上VS,只可以靠CSC,那么CSC就像于CodeDomProvider那一个类,而CSC自身会有为数不少命令参数,CompilerParameters
类就能为CSC传递1些编写翻译音信(生成类型,引用程序集等)。那么上面则尝试用最简便的方法看看这么些动态编译。

all(iterable)

只要元素都为True,恐怕为空,重临True.

all([1,2,4,True])
all([])
all([1,2,False])

True
True
False

 

2、实现UsernameTokenManager

 1        public static void TestMain()
 2         {
 3             _default = new CompilTest();
 4             _default.SimpleCompile(code);
 5         }
 6 
 7        static CompilTest _default;
 8 
 9 
10         CodeDomProvider compiler;
11         CompilerParameters comPara;
12         const string code=@"using System;
13 
14 class Test
15 {
16 static void Main()
17 {
18 Console.WriteLine(""Hello world"");
19 Console.ReadLine();
20 }
21 }";
22 
23         private CompilTest()
24         {
25             compiler = new CSharpCodeProvider();
26             comPara = new CompilerParameters();
27         }
28 
29 
30 
31         public void SimpleCompile(string code)
32         {
33             comPara.GenerateExecutable = true;
34             comPara.GenerateInMemory = false;
35             comPara.OutputAssembly = "SimpleCompile.exe";
36 
37             compiler.CompileAssemblyFromSource(comPara, code);
38         }

any(iterable)

若是任意一成分为True 重临True, 若是为空 ,再次来到False

第一,传回前端的c#在线代码,进行预编写翻译,用CSharpCodeProvider这一个法子。设置编写翻译版本3.伍

威尼斯人线上娱乐 104using System;
威尼斯人线上娱乐 105using Microsoft.Web.Services2;
威尼斯人线上娱乐 106using Microsoft.Web.Services2.Security;
威尼斯人线上娱乐 107using Microsoft.Web.Services2.Security.Tokens;
威尼斯人线上娱乐 108using System.Security;
威尼斯人线上娱乐 109using System.Security.Permissions;
威尼斯人线上娱乐 110
威尼斯人线上娱乐 111namespace WebTest
威尼斯人线上娱乐 112威尼斯人线上娱乐 113威尼斯人线上娱乐 114{
威尼斯人线上娱乐 115威尼斯人线上娱乐 116    /**//// <summary>
威尼斯人线上娱乐 117    /// CustomUsernameTokenManager 的摘要表达。
威尼斯人线上娱乐 118    /// </summary>
威尼斯人线上娱乐 119    [SecurityPermission(SecurityAction.Demand,
威尼斯人线上娱乐 120         Flags= SecurityPermissionFlag.UnmanagedCode)]
威尼斯人线上娱乐 121
威尼斯人线上娱乐 122    public class CustomUsernameTokenManager:UsernameTokenManager
威尼斯人线上娱乐 123威尼斯人线上娱乐 124    威尼斯人线上娱乐 125{
威尼斯人线上娱乐 126        public CustomUsernameTokenManager()
威尼斯人线上娱乐 127威尼斯人线上娱乐 128        威尼斯人线上娱乐 129{
威尼斯人线上娱乐 130            //
威尼斯人线上娱乐 131            // TODO: 在此地增多构造函数逻辑
威尼斯人线上娱乐 132            //
威尼斯人线上娱乐 133        }
威尼斯人线上娱乐 134
威尼斯人线上娱乐 135        protected override string AuthenticateToken(UsernameToken token)
威尼斯人线上娱乐 136威尼斯人线上娱乐 137        威尼斯人线上娱乐 138{
威尼斯人线上娱乐 139            if(token==null)
威尼斯人线上娱乐 140                throw new ArgumentNullException();
威尼斯人线上娱乐 141            if(token.Username==”username”)
威尼斯人线上娱乐 142                return “password”;
威尼斯人线上娱乐 143            else
威尼斯人线上娱乐 144                return “love”;
威尼斯人线上娱乐 145            
威尼斯人线上娱乐 146//                byte[] encodedUsername=System.Text.Encoding.UTF8.GetBytes(token.Username);
威尼斯人线上娱乐 147//                if(System.Text.Encoding.UTF8.GetString(encodedUsername)==”username”)
威尼斯人线上娱乐 148//                    return “password”;
威尼斯人线上娱乐 149//            else
威尼斯人线上娱乐 150//                    return “love”;
威尼斯人线上娱乐 151
威尼斯人线上娱乐 152        }
威尼斯人线上娱乐 153
威尼斯人线上娱乐 154    }
威尼斯人线上娱乐 155}
威尼斯人线上娱乐 156

接下来跑到当前运营程序的目录下就能找到变化的可执行文件SimpleCompile.exe。那一个正是最简易的动态编写翻译。

ascii(object)

返回object 的 string类型.

ascii([[1,2,3],2,3])

output
‘[[1,2,3],2,3]’

设置编写翻译参数GenerateInMemory:是还是不是在内部存款和储蓄器运维,True – memory generation,
false – external file generation。

3、Web service的web.config配置

  下面CompilerParameters
类的示范设置了多少个属性,GenerateExecutable是设置编译后生成的是dll如故exe,true是dll,false是exe,私下认可是生成dll的。OutputAssembly则是设置生成文书的公文名。对于GenerateInMemory这几个脾气,MSDN上说的是true就把编写翻译的变迁的顺序集保留在内部存款和储蓄器中,通过CompilerResults实例的CompiledAssembly能够得到。即使设为false则是生成文书保留在磁盘上,通过CompilerResults实例的PathToAssembly实例获取程序集的门道。不过经笔者实施,无论GenerateInMemory设置哪些值,都会在硬盘上转移对应的文本,区别在于OutputAssembly设置了对应的公文名的话,生成的文件会存在内定路径上,否则会存放在系统的最近文件夹里面。都能够透过CompiledAssembly获取生存的次序集。GenerateInMemory设值不相同在于设置了true,PathToAssembly的值为null,false就能赢得生成文书的门道。但是该类还有个别相比实用的性质没用上,ReferencedAssemblies属性设置编写翻译时要引用的dll;MainClass属性设置主类的称呼,要是要编译的代码中涵盖了七个饱含Main方法的类,生成的次序行使前后原则只进行第壹个Main方法,即使要施行别的类的Main方法的时候,就能够透过MainClass来设置。

bin(x)

回去二进制字符串初叶带’0b’ ,一般只好是int ,不是int
必须定义__index()__方法

安装生成施行文书的体系GenerateExecutable:True – exe file generation,
false – dll file generation。

威尼斯人线上娱乐 157<?xml version=”1.0″ encoding=”utf-8″?>
威尼斯人线上娱乐 158<configuration>
威尼斯人线上娱乐 159  <configSections>
威尼斯人线上娱乐 160    <section name=”microsoft.web.services2″ type=”Microsoft.Web.Services2.Configuration.WebServicesConfiguration, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ />
威尼斯人线上娱乐 161  </configSections>
威尼斯人线上娱乐 162  <system.web>
威尼斯人线上娱乐 163    <webServices>
威尼斯人线上娱乐 164      <protocols>
威尼斯人线上娱乐 165        <remove name=”HttpGet” />
威尼斯人线上娱乐 166        <remove name=”HttpPost” />
威尼斯人线上娱乐 167      </protocols>
威尼斯人线上娱乐 168      <soapExtensionTypes>
威尼斯人线上娱乐 169        <add type=”Microsoft.Web.Services2.WebServicesExtension, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″ priority=”1″ group=”0″ />
威尼斯人线上娱乐 170      </soapExtensionTypes>
威尼斯人线上娱乐 171    </webServices>
威尼斯人线上娱乐 172    <!–  动态调节和测试编写翻译
威尼斯人线上娱乐 173          设置 compilation debug=”true” 以启用 ASPX 调节和测试。不然,将此值设置为
威尼斯人线上娱乐 174          false 将提升此应用程序的运行时质量。
威尼斯人线上娱乐 175          设置 compilation debug=”true” 以将调节和测试符号(.pdb 音信)
威尼斯人线上娱乐 176          插入到编写翻译页中。因为那将创制推行起来
威尼斯人线上娱乐 177          较慢的大文件,所以理应只在调节和测试时将此值设置为 true,而在享有别的时候都安装为
威尼斯人线上娱乐 178          false。有关更加多音讯,请参考有关
威尼斯人线上娱乐 179          调节和测试 ASP.NET 文件的文书档案。
威尼斯人线上娱乐 180    –>
威尼斯人线上娱乐 181    <compilation defaultLanguage=”c#” debug=”true” />
威尼斯人线上娱乐 182    <!–  自定义错误新闻
威尼斯人线上娱乐 183          设置 customErrors mode=”On” 或 “RemoteOnly” 以启用自定义错误消息,或安装为 “Off” 以禁止使用自定义错误音讯。 
威尼斯人线上娱乐 184          为各种要拍卖的失实增多 <error> 标识。
威尼斯人线上娱乐 185
威尼斯人线上娱乐 186          “On” 始终呈现自定义(友好的)新闻。
威尼斯人线上娱乐 187          “Off” 始终展现详细的 ASP.NET 错误消息。
威尼斯人线上娱乐 188          “RemoteOnly” 只对不在本地 Web 服务器上运转的
威尼斯人线上娱乐 189           用户浮现自定义(友好的)音信。出于安全目标,建议选取此设置,以便 
威尼斯人线上娱乐 190           不向远程客户端展现应用程序的详细消息。
威尼斯人线上娱乐 191    –>
威尼斯人线上娱乐 192    <customErrors mode=”RemoteOnly” />
威尼斯人线上娱乐 193    <identity impersonate=”true” />
威尼斯人线上娱乐 194【威尼斯人线上娱乐】动态编写翻译,内置函数。    <!–  身份验证 
威尼斯人线上娱乐 195          此节设置应用程序的身份验证战略。大概的形式是 “Windows”、 
威尼斯人线上娱乐 196          “Forms”、 “Passport” 和 “None”
威尼斯人线上娱乐 197
威尼斯人线上娱乐 198          “None” 不实践身份验证。 
威尼斯人线上娱乐 199          “Windows” IIS 根据应用程序的安装进行身份验证 
威尼斯人线上娱乐 200            (基本、简要或合并 Windows)。在 IIS 中务必禁止使用匿名访问。
威尼斯人线上娱乐 201          “Forms” 您为用户提供一个输入凭据的自定义窗体(Web 页),然后 
威尼斯人线上娱乐 202           在你的应用程序中注解他们的地方。用户凭据标志存款和储蓄在 Cookie 中。
威尼斯人线上娱乐 203          “Passport” 身份验证是经过 Microsoft 的汇聚身份验证服务执行的,
威尼斯人线上娱乐 204           它为成员站点提供单身登6和主导配置文件服务。
威尼斯人线上娱乐 205    –>
威尼斯人线上娱乐 206    <authentication mode=”Windows” />
威尼斯人线上娱乐 207    <!–  授权 
威尼斯人线上娱乐 208           此节设置应用程序的授权计谋。能够允许或拒差之千里的用户或剧中人物访问
威尼斯人线上娱乐 209          应用程序能源。通配符: “*” 表示任哪个人,”?” 表示匿名
威尼斯人线上娱乐 210          (未经身份验证的)用户。
威尼斯人线上娱乐 211    –>
威尼斯人线上娱乐 212    <authorization>
威尼斯人线上娱乐 213      <allow users=”*” />
威尼斯人线上娱乐 214      <!– 允许全数用户 –>
威尼斯人线上娱乐 215      <!–  <allow     users=”[逗号分隔的用户列表]”
威尼斯人线上娱乐 216                             roles=”[逗号分隔的剧中人物列表]”/>
威尼斯人线上娱乐 217                  <deny      users=”[逗号分隔的用户列表]”
威尼斯人线上娱乐 218                             roles=”[逗号分隔的剧中人物列表]”/>
威尼斯人线上娱乐 219            –>
威尼斯人线上娱乐 220    </authorization>
威尼斯人线上娱乐 221    <!–  应用程序等级追踪记录
威尼斯人线上娱乐 222          应用程序等第跟踪为应用程序中的每一页启用追踪日志输出。
威尼斯人线上娱乐 223          设置 trace enabled=”true” 能够启用应用程序追踪记录。假使 pageOutput=”true”,则
威尼斯人线上娱乐 224          在每一页的最底层呈现追踪音讯。不然,能够因而浏览 Web 应用程序
威尼斯人线上娱乐 225           根目录中的 “trace.axd” 页来查阅
威尼斯人线上娱乐 226          应用程序跟踪日志。
威尼斯人线上娱乐 227    –>
威尼斯人线上娱乐 228    <trace enabled=”false” requestLimit=”10″ pageOutput=”false” traceMode=”SortByTime” localOnly=”true” />
威尼斯人线上娱乐 229    <!–  会话状态设置
威尼斯人线上娱乐 230          暗许情形下,ASP.NET 使用 Cookie 来标志哪些请求属于特定的对话。
威尼斯人线上娱乐 231          若是 Cookie 不可用,则足以经过将会话标志符增加到 U昂科拉L 来追踪会话。
威尼斯人线上娱乐 232         若要禁止使用 Cookie,请设置 sessionState cookieless=”true”。
威尼斯人线上娱乐 233    –>
威尼斯人线上娱乐 234    <sessionState mode=”InProc” stateConnectionString=”tcpip=127.0.0.1:42424″ sqlConnectionString=”data source=127.0.0.1;Trusted_Connection=yes” cookieless=”false” timeout=”20″ />
威尼斯人线上娱乐 235    <!–  全球化
威尼斯人线上娱乐 236          此节设置应用程序的整个世界化设置。
威尼斯人线上娱乐 237    –>
威尼斯人线上娱乐 238    <globalization requestEncoding=”utf-8″ responseEncoding=”utf-8″ />
威尼斯人线上娱乐 239  </system.web>
威尼斯人线上娱乐 240  <microsoft.web.services2>
威尼斯人线上娱乐 241    <diagnostics>
威尼斯人线上娱乐 242      <trace enabled=”true” input=”InputTrace.webinfo” output=”OutputTrace.webinfo” />
威尼斯人线上娱乐 243      <detailedErrors enabled=”false” />
威尼斯人线上娱乐 244    </diagnostics>
威尼斯人线上娱乐 245    <security>
威尼斯人线上娱乐 246        <securityTokenManager type=”WebTest.CustomUsernameTokenManager,WebTest” xmlns:wsse=”” qname=”wsse:UsernameToken” />
威尼斯人线上娱乐 247    </security>
威尼斯人线上娱乐 248  </microsoft.web.services2>
威尼斯人线上娱乐 249</configuration>

  CodeDomProvider只是一个抽象类而已,对于区别的程序语言,有相应的类去承袭这么些抽象类,C#的正是CSharpCodeProvider类。用于编写翻译的办法有四个,方法的扬言如下

class bool([x])

回到bool 结果,if x是 False 也许轻松重返False,别的重返True,bool()是int的子集(subclass)

编写翻译后回来result结果。

4、试验的.net客户端代码

public virtual CompilerResults CompileAssemblyFromDom(CompilerParameters options, params CodeCompileUnit[] compilationUnits);
public virtual CompilerResults CompileAssemblyFromFile(CompilerParameters options, params string[] fileNames);
public virtual CompilerResults CompileAssemblyFromSource(CompilerParameters options, params string[] sources);

class bytearray([source[, encoding[, errors]]])

回去新的位数组(0<=x<256), 它有诸多可变类别的常用方法
根据源参数的两样早先化数组

  • 若果它是1个字符串,那么你还必须给出编码(以及可选的荒谬)参数;bytearray()然后使用str.encode()将-
    字符串转换为字节。
  • 即使它是3个整数,那么数组将具备这几个分寸,并将用null字节早先化。
  • 假如它是吻合缓冲区接口的对象,则将应用对象的只读缓冲区来起头化字节数组。
  • 1旦它是可迭代的,那么它必须是range 0 < = x <
    25六的平头的迭代,它被用作数组的上马内容

b = bytearray()
len(b)
b = bytearray('中文', 'utf-8')
len(b)
b = bytearray(5)
len(b)
bytearray([1,2,3,4,5])
len(b)

输出
bytearray(b”)
0
bytearray(b’\xe4\xb8\xad\xe6\x96\威尼斯人线上娱乐,x87′)
6
bytearray(b’\x00\x00\x00\x00\x00′)
5
bytearray(b’\x01\x02\x03\x04\x05′)
5

 

威尼斯人线上娱乐 250using System;
威尼斯人线上娱乐 251using System.Drawing;
威尼斯人线上娱乐 252using System.Collections;
威尼斯人线上娱乐 253using System.ComponentModel;
威尼斯人线上娱乐 254using System.Windows.Forms;
威尼斯人线上娱乐 255using System.Data;
威尼斯人线上娱乐 256using Microsoft.Web.Services2;
威尼斯人线上娱乐 257using Microsoft.Web.Services2.Security;
威尼斯人线上娱乐 258using Microsoft.Web.Services2.Security.Tokens;
威尼斯人线上娱乐 259using GDS.Ldap;
威尼斯人线上娱乐 260using System.Text;
威尼斯人线上娱乐 261
威尼斯人线上娱乐 262namespace WSEClientTest
威尼斯人线上娱乐 263威尼斯人线上娱乐 264威尼斯人线上娱乐 265{
威尼斯人线上娱乐 266威尼斯人线上娱乐 267    /**//// <summary>
威尼斯人线上娱乐 268    /// Form1 的摘要表达。
威尼斯人线上娱乐 269    /// </summary>
威尼斯人线上娱乐 270    public class Form1 : System.Windows.Forms.Form
威尼斯人线上娱乐 271威尼斯人线上娱乐 272    威尼斯人线上娱乐 273{
威尼斯人线上娱乐 274        private System.Windows.Forms.Button button1;
威尼斯人线上娱乐 275        
威尼斯人线上娱乐 276威尼斯人线上娱乐 277        /**//// <summary>
威尼斯人线上娱乐 278        /// 必需的设计器变量。
威尼斯人线上娱乐 279        /// </summary>
威尼斯人线上娱乐 280        private System.ComponentModel.Container components = null;
威尼斯人线上娱乐 281
威尼斯人线上娱乐 282        public Form1()
威尼斯人线上娱乐 283威尼斯人线上娱乐 284        威尼斯人线上娱乐 285{
威尼斯人线上娱乐 286            //
威尼斯人线上娱乐 287            // Windows 窗体设计器协理所不可缺少的
威尼斯人线上娱乐 288            //
威尼斯人线上娱乐 289            InitializeComponent();
威尼斯人线上娱乐 290
威尼斯人线上娱乐 291            //
威尼斯人线上娱乐 292            // TODO: 在 InitializeComponent 调用后增多别的构造函数代码
威尼斯人线上娱乐 293            //
威尼斯人线上娱乐 294        }
威尼斯人线上娱乐 295
威尼斯人线上娱乐 296威尼斯人线上娱乐 297        /**//// <summary>
威尼斯人线上娱乐 298        /// 清理全体正在利用的财富。
威尼斯人线上娱乐 299        /// </summary>
威尼斯人线上娱乐 300        protected override void Dispose( bool disposing )
威尼斯人线上娱乐 301威尼斯人线上娱乐 302        威尼斯人线上娱乐 303{
威尼斯人线上娱乐 304            if( disposing )
威尼斯人线上娱乐 305威尼斯人线上娱乐 306            威尼斯人线上娱乐 307{
威尼斯人线上娱乐 308                if (components != null) 
威尼斯人线上娱乐 309威尼斯人线上娱乐 310                威尼斯人线上娱乐 311{
威尼斯人线上娱乐 312                    components.Dispose();
威尼斯人线上娱乐 313                }
威尼斯人线上娱乐 314            }
威尼斯人线上娱乐 315            base.Dispose( disposing );
威尼斯人线上娱乐 316        }
威尼斯人线上娱乐 317
威尼斯人线上娱乐 318威尼斯人线上娱乐 319        Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
威尼斯人线上娱乐 320威尼斯人线上娱乐 321        /**//// <summary>
威尼斯人线上娱乐 322        /// 设计器帮助所需的办法 – 不要选代替码编辑器修改
威尼斯人线上娱乐 323        /// 此方法的始末。
威尼斯人线上娱乐 324        /// </summary>
威尼斯人线上娱乐 325        private void InitializeComponent()
威尼斯人线上娱乐 326威尼斯人线上娱乐 327        威尼斯人线上娱乐 328{
威尼斯人线上娱乐 329            this.button1 = new System.Windows.Forms.Button();
威尼斯人线上娱乐 330            
威尼斯人线上娱乐 331            this.SuspendLayout();
威尼斯人线上娱乐 332            // 
威尼斯人线上娱乐 333            // button1
威尼斯人线上娱乐 334            // 
威尼斯人线上娱乐 335            this.button1.Location = new System.Drawing.Point(32, 32);
威尼斯人线上娱乐 336            this.button1.Name = “button1”;
威尼斯人线上娱乐 337            this.button1.TabIndex = 0;
威尼斯人线上娱乐 338            this.button1.Text = “button1”;
威尼斯人线上娱乐 339            this.button1.Click += new System.EventHandler(this.button1_Click);
威尼斯人线上娱乐 340        
威尼斯人线上娱乐 341            // 
威尼斯人线上娱乐 342            // Form1
威尼斯人线上娱乐 343            // 
威尼斯人线上娱乐 344            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
威尼斯人线上娱乐 345            this.ClientSize = new System.Drawing.Size(456, 325);            
威尼斯人线上娱乐 346            this.Controls.Add(this.button1);
威尼斯人线上娱乐 347            this.Name = “Form1”;
威尼斯人线上娱乐 348            this.Text = “Form1”;
威尼斯人线上娱乐 349            this.ResumeLayout(false);
威尼斯人线上娱乐 350
威尼斯人线上娱乐 351        }
威尼斯人线上娱乐 352        #endregion
威尼斯人线上娱乐 353
威尼斯人线上娱乐 354威尼斯人线上娱乐 355        /**//// <summary>
威尼斯人线上娱乐 356        /// 应用程序的主入口点。
威尼斯人线上娱乐 357        /// </summary>
威尼斯人线上娱乐 358        [STAThread]
威尼斯人线上娱乐 359        static void Main() 
威尼斯人线上娱乐 360威尼斯人线上娱乐 361        威尼斯人线上娱乐 362{
威尼斯人线上娱乐 363            Application.Run(new Form1());
威尼斯人线上娱乐 364        }
威尼斯人线上娱乐 365
威尼斯人线上娱乐 366        private void button1_Click(object sender, System.EventArgs e)
威尼斯人线上娱乐 367威尼斯人线上娱乐 368        威尼斯人线上娱乐 369{
威尼斯人线上娱乐 370            UsernameToken token=new UsernameToken(“username”,”password1″,PasswordOption.SendPlainText);
威尼斯人线上娱乐 371            try
威尼斯人线上娱乐 372威尼斯人线上娱乐 373            威尼斯人线上娱乐 374{
威尼斯人线上娱乐 375                localhost.SumServiceWse serviceProxy=new localhost.SumServiceWse();
威尼斯人线上娱乐 376                SoapContext requestContext=serviceProxy.RequestSoapContext;
威尼斯人线上娱乐 377                requestContext.Security.Timestamp.TtlInSeconds=60;
威尼斯人线上娱乐 378                requestContext.Security.Tokens.Add(token);
威尼斯人线上娱乐 379                
威尼斯人线上娱乐 380                requestContext.Security.Elements.Add(new MessageSignature(token));
威尼斯人线上娱乐 381                
威尼斯人线上娱乐 382                int sum=serviceProxy.IntAdd(3,5);
威尼斯人线上娱乐 383                MessageBox.Show(sum.ToString());
威尼斯人线上娱乐 384
威尼斯人线上娱乐 385            }
威尼斯人线上娱乐 386            catch (System.Web.Services.Protocols.SoapException se) 
威尼斯人线上娱乐 387威尼斯人线上娱乐 388            威尼斯人线上娱乐 389{
威尼斯人线上娱乐 390                MessageBox.Show(se.ToString());
威尼斯人线上娱乐 391            }
威尼斯人线上娱乐 392            catch (Exception ex) 
威尼斯人线上娱乐 393威尼斯人线上娱乐 394            威尼斯人线上娱乐 395{
威尼斯人线上娱乐 396                MessageBox.Show(ex.ToString());
威尼斯人线上娱乐 397                return;
威尼斯人线上娱乐 398            }
威尼斯人线上娱乐 399        
威尼斯人线上娱乐 400        }
威尼斯人线上娱乐 401
威尼斯人线上娱乐 402    
威尼斯人线上娱乐 403        }
威尼斯人线上娱乐 404    }
威尼斯人线上娱乐 405
威尼斯人线上娱乐 406
威尼斯人线上娱乐 407

 

bytes([source[, encoding[, errors]]])

重新bytearray()的事例,输出结果为
b”
b’\xe4\xb8\xad\xe6\x96\x87′
b’\x00\x00\x00\x00\x00′
b’\x01\x02\x03\x04\x05′

威尼斯人线上娱乐 408

5、JAVA的客户端代码,使用axis-wsse(可从http://sourceforge.net/projects/axis-wsse/得到)

  下边用到的是CompileAssemblyFromSource,传进去第一个参数是急需编写翻译的代码字符串。而第3个主意传入的参数是内需编写翻译的代码文件名。以上四个措施都回来同贰个值——一个CompilerResults的实例。平日那几个示例能够精晓编写翻译是还是不是因而,要是战败了不当的代码的职位,更关键的是可以获得编写翻译成功的次第集。当编写翻译成功之后,要么就透过反射来调用生成好的事物,要么就直接展开进度去推行exe。

callabel(object)

丰富处理:倘诺编写翻译时发出错误,生成错误编号和错误文本新闻并重临给前端。

威尼斯人线上娱乐 409/*
威尼斯人线上娱乐 410 * Created on 2005-2-26
威尼斯人线上娱乐 411 *
威尼斯人线上娱乐 412 * TODO To change the template for this generated file go to
威尼斯人线上娱乐 413 * Window – Preferences – Java – Code Style – Code Templates
威尼斯人线上娱乐 414 */
威尼斯人线上娱乐 415package WSEClient;
威尼斯人线上娱乐 416
威尼斯人线上娱乐 417import net.vitale.filippo.axis.handlers.*;
威尼斯人线上娱乐 418import org.apache.axis.client.*;
威尼斯人线上娱乐 419import javax.xml.namespace.*;
威尼斯人线上娱乐 420
威尼斯人线上娱乐 421/**
威尼斯人线上娱乐 422 * @author Jeet
威尼斯人线上娱乐 423 *
威尼斯人线上娱乐 424 * TODO To change the template for this generated type comment go to
威尼斯人线上娱乐 425 * Window – Preferences – Java – Code Style – Code Templates
威尼斯人线上娱乐 426 */
威尼斯人线上娱乐 427public class TestService
威尼斯人线上娱乐 428{
威尼斯人线上娱乐 429
威尼斯人线上娱乐 430    static String usernameS = null; 
威尼斯人线上娱乐 431    static String passwordS = null; 
威尼斯人线上娱乐 432
威尼斯人线上娱乐 433    public static void main(String[] args)
威尼斯人线上娱乐 434    {
威尼斯人线上娱乐 435        try { 
威尼斯人线上娱乐 436            Integer i = new Integer(5); 
威尼斯人线上娱乐 437            Integer j = new Integer(2); 
威尼斯人线上娱乐 438            String endpoint=””; 
威尼斯人线上娱乐 439            Service service = new Service(); 
威尼斯人线上娱乐 440            Call call = (Call)service.createCall(); 
威尼斯人线上娱乐 441            call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
威尼斯人线上娱乐 442            call.setOperationName(new QName(“”)); 
威尼斯人线上娱乐 443            call.addParameter(“a”,org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN); 
威尼斯人线上娱乐 444            call.addParameter(“b”,org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN); 
威尼斯人线上娱乐 445            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT); 
威尼斯人线上娱乐 446//            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
威尼斯人线上娱乐 447            call.setUseSOAPAction(true); 
威尼斯人线上娱乐 448            call.setSOAPActionURI(“”); 
威尼斯人线上娱乐 449            //add a user token 
威尼斯人线上娱乐 450            usernameS=”1234″;
威尼斯人线上娱乐 451            passwordS = “password”; 
威尼斯人线上娱乐 452            call.setUsername(usernameS); 
威尼斯人线上娱乐 453            call.setPassword(passwordS); 
威尼斯人线上娱乐 454    
威尼斯人线上娱乐 455            call.setProperty(WsseClientHandler.PASSWORD_OPTION, WsseClientHandler.PASSWORD_DIGEST_WITH_NONCE); 
威尼斯人线上娱乐 456            call.setClientHandlers(new WsseClientHandler(), null); 
威尼斯人线上娱乐 457            Integer k = (Integer)call.invoke(new Object[]{i,j}); 
威尼斯人线上娱乐 458            System.out.println( “result is ” + k.toString() + “.”); 
威尼斯人线上娱乐 459//            Vector inputs = new Vector();
威尼斯人线上娱乐 460//            String s=(String)call.invoke(inputs.toArray());
威尼斯人线上娱乐 461//            System.out.println(“result is “+s+ “.”);
威尼斯人线上娱乐 462                  
威尼斯人线上娱乐 463           } 
威尼斯人线上娱乐 464           catch (org.apache.axis.AxisFault e) 
威尼斯人线上娱乐 465           { 
威尼斯人线上娱乐 466            if (e.getFaultCode().toString() .equals(“{“)) 
威尼斯人线上娱乐 467             System.err.println(“The usernameToken and password aren’t right! “); 
威尼斯人线上娱乐 468            else { 
威尼斯人线上娱乐 469                   System.err.println(e.getFaultCode().toString()); 
威尼斯人线上娱乐 470            } 
威尼斯人线上娱乐 471           } 
威尼斯人线上娱乐 472           catch(Exception e) 
威尼斯人线上娱乐 473           { 
威尼斯人线上娱乐 474            System.err.println(e.toString()) ; 
威尼斯人线上娱乐 475           } 
威尼斯人线上娱乐 476          } 
威尼斯人线上娱乐 477      } 
威尼斯人线上娱乐 478
威尼斯人线上娱乐 479
威尼斯人线上娱乐 480

  那么地点还有3个措施没介绍,这几个格局的参数是CodeCompileUnit,这些类MSDN上的疏解是为
CodeDOM
程序图形提供容器。但个人认为它能够说是二个代码的构造器,CompileAssemblyFromFile方法和CompileAssemblyFromSource方法无论代码来自文件只怕字符串,它都以确实的C#代码,不过用了CodeCompileUnit就认为通过配备的款式来经行编制程序,而不是逐行逐行地写。先看看下边代码,定义了五个方法,二个是布局CodeCompileUnit实例,其他多个法子是生成C#代码并出口到文件和编写翻译生成

chr(i)

归来unicode编码字符串
范围0到0x10FFFF

 

 1         private CodeCompileUnit CreateUnitTest()
 2         {
 3             CodeCompileUnit unit = new CodeCompileUnit();
 4 
 5             //命名空间设置
 6             CodeNamespace codeNamespace = new CodeNamespace("TestNameSpace");//设置命名空间名字
 7             codeNamespace.Imports.Add(new CodeNamespaceImport("System"));//引用的命名空间
 8             unit.Namespaces.Add(codeNamespace);
 9 
10             //类的定义
11             CodeTypeDeclaration testClass = new CodeTypeDeclaration("TestClass");//类名
12             testClass.Attributes= MemberAttributes.Public;
13             testClass.CustomAttributes.Add(new CodeAttributeDeclaration("Serializable"));//类的Attributes
14             codeNamespace.Types.Add(testClass);
15 
16             //字段定义
17             CodeMemberField strMember = new CodeMemberField("String", "str1");
18             strMember.Attributes= MemberAttributes.Private;
19             testClass.Members.Add(strMember);
20 
21             CodeMemberField _default = new CodeMemberField("TestClass", "_default");
22             _default.Attributes = MemberAttributes.Private | MemberAttributes.Static;
23             _default.InitExpression = new CodeSnippetExpression("new TestClass(\"hello world\")");
24             testClass.Members.Add(_default);
25 
26             //构造函数定义
27             CodeConstructor constructor = new CodeConstructor();
28             constructor.Attributes = MemberAttributes.Public;
29             constructor.Parameters.Add(new CodeParameterDeclarationExpression("String", "para1"));
30             constructor.Statements.Add(new CodeSnippetStatement("str1=para1;"));
31             testClass.Members.Add(constructor);
32 
33             //方法定义
34             CodeMemberMethod method = new CodeMemberMethod();
35             method.Name = "Print";
36             method.Attributes = MemberAttributes.Static | MemberAttributes.Public;
37             CodeParameterDeclarationExpression para1 = new CodeParameterDeclarationExpression("String", "str");
38             method.Parameters.Add(para1);
39             method.ReturnType = new CodeTypeReference(typeof(void));
40             CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console");
41             CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
42                 csSystemConsoleType, "WriteLine", 
43                 new CodeArgumentReferenceExpression("str"));
44             method.Statements.Add(cs1);
45             testClass.Members.Add(method);
46 
47             //程序入口定义 Main方法
48             CodeEntryPointMethod mainMethod = new CodeEntryPointMethod();
49             mainMethod.Attributes = MemberAttributes.Public;
50             CodeTypeReferenceExpression csMethodCall = new CodeTypeReferenceExpression("TestNameSpace.TestClass");
51             cs1 = new CodeMethodInvokeExpression(csMethodCall, "Print", new CodeTypeReferenceExpression("_default.str1"));
52             mainMethod.Statements.Add(cs1);
53             testClass.Members.Add(mainMethod);
54 
55             return unit;
56         }
57 
58         private void Compile(CodeCompileUnit unit)
59         {
60             comPara.GenerateExecutable = true;
61             comPara.GenerateInMemory = true;
62             comPara.OutputAssembly = "SimpleCompile.exe";
63             //comPara.MainClass = "Test2";
64 
65             CompilerResults result = compiler.CompileAssemblyFromDom(comPara, unit);
66 
67             if (result.Errors.Count == 0)
68             {
69                 Assembly assembly = result.CompiledAssembly;
70                 Type AType = assembly.GetType("TestNameSpace.TestClass");
71                 MethodInfo method = AType.GetMethod("Main", BindingFlags.Static | BindingFlags.Public);
72                 Console.WriteLine(method.Invoke(null, null));
73             }
74             else
75             {
76                 foreach (CompilerError item in result.Errors)
77                 {
78                     Console.WriteLine(item.ErrorText);
79                 }
80             }
81         }
82 
83         private void CreteCodeFile(CodeCompileUnit unit, string fileName)
84         {
85             StringBuilder sb=new StringBuilder();
86             using (StringWriter  tw=new StringWriter(sb))
87             {
88                 compiler.GenerateCodeFromCompileUnit(unit, tw, new CodeGeneratorOptions());
89             }
90             File.WriteAllText(fileName, sb.ToString());
91         }

@classmethod()

类装饰器

威尼斯人线上娱乐 481

 

@staticmethod()

静态方法

找到代码中的Main方法,并运维(CompiledMethod.Invoke(null, null);)

  上边代码作者感到的要紧在于构造CodeCompileUnit,在MSDN上对GenerateCodeFromCompileUnit的描述是:基于包涵在 CodeCompileUnit 对象的内定数组中的 System.CodeDom 树,使用钦点的编写翻译器设置编写翻译程序集。那里有个DOM作者想起了JS对HTML的DOM树,可是在组织整个CodeCompileUnit进度中,也深认为树的层次结构,三个code文件之中有八个命名空间,命名空间里面又有5种类型(类,接口,委托),类型里面又含有各自的成员(字段,属性,方法),方法里面含有了讲话,语句里面又富含了表明式。

compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

其1函数用来编写翻译1段字符串的源码,结果能够生成字节码大概AST(抽像语法树),字节码能够选用函数exec()来实行,而AST能够使用eval()来一而再编译。

  • 参数source是1串字符串的源码,恐怕是AST对象数组。
  • 参数filename是读取字符串的文书对象,假设不是从文件里读取源码来编写翻译,那么那里能够放1些用来标记这个代码的字符串。
  • 参数mode是用来指明那种表示的源码类型;如若是exec类型,表示那是2个队列语句,能够拓展运作;若是是eval类型,表示那是二个纯粹的表明式语句,能够用来总计相应的值出来;假使是single类型,表示那是一个纯净语句,选取互动情势实践,在那种景色下,假设是三个表明式,一般会输出结果,而不是打字与印刷为None输出。
  • 可选参数flags和dont_inherit是用来调节编写翻译源码时的标记,可以查阅PEP23陆文书档案来打探这么些参数,以及有关编写翻译的证实。若是两者选拔缺省参数(也即双方都以零值),在调用本函数编写翻译时,首要行使代码中指明的编写翻译特征来相比;借使flags参数设置有值,而dont_inherit未有设置(便是零值),那么编写翻译代码时,不仅源码的编写翻译特征起效果,而且flags指明的天性也起效果,十三分两者的并集;就算参数dont_inherit设置有值(便是非零值),编写翻译语句时唯有参数flags指明的编写翻译特征值起效果,就是不选用源码里指明的特点。
  • 编写翻译特征是按位图的艺术设置到参数里,能够查看__future__
  • 可选参数optimize是用来指明编写翻译器使用优化的级差;缺省值是-1,表示使用命令行参数-O中赢得的优化等第为准;倘诺设置值为0(正是不用优化,debug是安装true),是绝非优化;假如设置值为壹,assert语句被删去,debug安装为false;如若设置值为2,除了设置值为壹的效应之外,还会把代码里文书档案表达也删除掉,达到最棒优化结果。
  • 本函数编写翻译代码时,假使语法出错会重返SyntaxError;假如代码包罗部分空字节,则赶回类型错误TypeError。

#compile()
str = "for i in range(0,10): print(i)"
c = compile(str,'','exec')   # 编译为字节代码对象
exec(c)                          # 执行

str2 = "3*x + 4*y"
c2 = compile(str2, '', 'eval')  # 编译为表达式

code_str = '''print('olivetree')\nprint( 'olivetree123') '''
c = compile(code_str,'<string>','exec')
exec(c)
code_str = '''1+1 '''
c = compile(code_str, '<string>', 'eval'
eval(c)

回来结果。

威尼斯人线上娱乐 482

complex([real[, imag])

复合函数 real可认为number和string类型,imag只好为number

complex(2,5)
complex(2)
complex('2.0',5.0)

输出
2+5j
2+0j
2.0+5.0j

 

但是那种措施从开垦人士来讲代码量加大了。

运作示例

  那篇也是营养不多,不上海博物馆客园首页了。

开荒页面,有预写好的c#Hello World小程序

威尼斯人线上娱乐 483

 

大功告成运营示例

威尼斯人线上娱乐 484

 

漏洞非常多运营示例,报错消息体现。

威尼斯人线上娱乐 485

最后贴上前端ajax代码

    $("#save").click(function (e) {
        e.preventDefault();
        $.ajax({
            type: 'POST',
            url: "CompileTest",
            data: { "CSharpCode": $("#CSharpCode").val() },
            success: function (result) {
                $("#result").text(result);
            },
        });
    });

 

注:

var sw = new StringWriter();
                Console.SetOut(sw);
                Console.SetError(sw);

 

重定向console的writeLine新闻到字符串sw中。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图