【亚洲必赢官网】动态编写翻译,在线运转

始于成功c#代码的在线编辑。    

在帮客户写JAVA客户端访问.NET实现的Web
service的以身作则代码发现了贰个妙趣横生的题材。为有保持安全性,使用了wse二.0
sp二的ws-security,本人达成了UsernameTokenManager的AuthenticateToken方法。当从本机的浏览器访问该服务时,重临HTTP
500谬误。写了二个winform客户端的测试代码,当使用不得法的用户名与密码时,服务抛出荒谬,使用科学的用户名与密码时,服务重临正确的结果,壹切看起来都很健康。但当使用java的客户端访问时,无论使用什么的客户名与密码,服务均能科学重回结果。不理解是或不是WSE二.0的bug依旧安装的标题,让jeet格外郁闷。
示范代码如下:
1、WEB service代码:

  今后也触发一下动态编写翻译吧!2018年也闻讯过了,但是只瞄了1眼,没去实践,不久前有同事在介绍动态编写翻译,那时作者因为有个别原因无法去听取。未来就看一下

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        /// 设计器支持所需的不2秘诀 – 不要使用代码编辑器修改
亚洲必赢官网 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 服务,请按 F伍 键
亚洲必赢官网 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
类。前者就充当1个编写翻译器,后者则是用于记录传递给编写翻译器的局部参数。在最初学习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#在线代码,进行预编译,用C夏普CodeProvider这几个法子。设置编写翻译版本叁.五

亚洲必赢官网 104using System;
亚洲必赢官网 105using Microsoft.Web.Services2;
亚洲必赢官网 106using Microsoft.Web.Services2.Security;
亚洲必赢官网 107using Microsoft.Web.Services2.Security.Tokens;
亚洲必赢官网 108【亚洲必赢官网】动态编写翻译,在线运转。using 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           它为成员站点提供单身登录和中坚配置文件服务。
亚洲必赢官网 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          应用程序级别跟踪为应用程序中的每1页启用跟踪日志输出。
亚洲必赢官网 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结果。

四、试验的.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<25陆), 它有大多数可变体系的常用方法
依据源参数的比不上开头化数组

  • 即便它是多个字符串,那么你还必须给出编码(以及可选的错误)参数;bytearray()然后选择str.encode()将-
    字符串转换为字节。
  • 比方它是贰个整数,那么数组将拥有那么些尺寸,并将用null字节初步化。
  • 若果它是切合缓冲区接口的靶子,则将运用对象的只读缓冲区来初阶化字节数组。
  • 设若它是可迭代的,那么它必须是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个方法传入的参数是须求编译的代码文件名。以上四个办法都回到同八个值——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

  那么地方还有1个格局没介绍,这几个措施的参数是CodeCompileUnit,这些类MSDN上的解释是为
CodeDOM
程序图形提供容器。但个人感觉它能够说是1个代码的构造器,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文件之中有四个命名空间,命名空间里面又有多样类型(类,接口,委托),类型里面又饱含各自的积极分子(字段,属性,方法),方法里面包含了言语,语句里面又包罗了表达式。

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

这么些函数用来编译壹段字符串的源码,结果能够生成字节码大概AST(抽像语法树),字节码能够动用函数exec()来实施,而AST能够接纳eval()来持续编写翻译。

  • 参数source是一串字符串的源码,可能是AST对象数组。
  • 参数filename是读取字符串的公文对象,如若不是从文件里读取源码来编写翻译,那么那里能够放一些用来标识那么些代码的字符串。
  • 参数mode是用来指明这种表示的源码类型;若是是exec类型,表示那是三个行列语句,能够开始展览运维;若是是eval类型,表示那是一个纯净的表明式语句,能够用来总结相应的值出来;假若是single类型,表示那是三个单纯语句,选用互动情势推行,在那种场馆下,假诺是一个表明式,壹般会输出结果,而不是打字与印刷为None输出。
  • 可选参数flags和dont_inherit是用来控制编写翻译源码时的评释,能够查看PEP23陆文档来打听这个参数,以及相关编写翻译的注明。如若两者接纳缺省参数(也即双方都以零值),在调用本函数编写翻译时,重要利用代码中指明的编写翻译特征来相比较;尽管flags参数设置有值,而dont_inherit未有设置(就是零值),那么编写翻译代码时,不仅源码的编译特征起成效,而且flags指明的性状也起效果,相当两者的并集;要是参数dont_inherit设置有值(就是非零值),编写翻译语句时只有参数flags指明的编译特征值起功效,正是不采用源码里指明的特点。
  • 编写翻译特征是按位图的不二等秘书籍设置到参数里,能够查阅__future__
  • 可选参数optimize是用来指明编写翻译器使用优化的等级;缺省值是-一,表示使用命令行参数-O中获取的优化等级为准;假设设置值为0(正是不用优化,debug是设置true),是从未优化;要是设置值为1,assert语句被删除,debug安装为false;假如设置值为二,除了设置值为一的效果之外,还会把代码里文书档案表明也删除掉,达到最棒优化结果。
  • 本函数编写翻译代码时,若是语法出错会再次来到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地图