停放函数,在线运营

始发完成c#代码的在线编辑。    

在帮客户写JAVA客户端访问.NET达成的Web
service的言传身教代码发现了1个幽默的难点。为有保障安全性,使用了wse贰.0
sp2的ws-security,本人达成了UsernameTokenManager的AuthenticateToken方法。当从本机的浏览器访问该服务时,再次来到HTTP
500荒唐。写了一个winform客户端的测试代码,当使用不正确的用户名与密码时,服务抛出荒唐,使用正确的用户名与密码时,服务重回正确的结果,1切看起来都很不荒谬。但当使用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
类。前者就担任贰个编译器,后者则是用于记录传递给编写翻译器的有个别参数。在早先时期学习C#的行使,鄙人未有用得上VS,只好靠CSC,那么CSC就就像是于CodeDomProvider那么些类,而CSC本人会有数不完发令参数,CompilerParameters
类就能为CSC传递一些编写翻译消息(生成类型,引用程序集等)。那么下边则尝试用最简单易行的不二法门看看那几个动态编写翻译。

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这一个方法。设置编写翻译版本三.5

美高梅开户网址 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’ ,1般只能是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          应用程序品级追踪为应用程序中的每一页启用跟踪日志输出。
美高梅开户网址 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 不可用,则能够通过将会话标志符增添到 UPAJEROL 来跟踪会话。
美高梅开户网址 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只是2个抽象类而已,对于分歧的程序语言,有对应的类去承袭那么些抽象类,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<25陆), 它有超越三分之1可变连串的常用方法
依据源参数的差别起首化数组

  • 设若它是1个字符串,那么您还非得给出编码(以及可选的失实)参数;bytearray()然后采取str.encode()将-
    字符串调换为字节。
  • 假诺它是1个平头,那么数组将具有这一个分寸,并将用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    /// Form壹 的摘要表达。
美高梅开户网址 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

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

  上面用到的是CompileAssemblyFromSource,传进去第3个参数是亟需编写翻译的代码字符串。而首个主意传入的参数是急需编译的代码文件名。以上八个措施都回来同1个值——二个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
程序图形提供容器。但个人感到它能够说是3个代码的构造器,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)

其1函数用来编写翻译一段字符串的源码,结果能够生成字节码或许AST(抽像语法树),字节码能够接纳函数exec()来实施,而AST能够使用eval()来两次三番编写翻译。

  • 参数source是1串字符串的源码,也许是AST对象数组。
  • 参数filename是读取字符串的文件对象,假如不是从文件里读取源码来编写翻译,那么那里能够放壹些用来标记这一个代码的字符串。
  • 参数mode是用来指明这种表示的源码类型;假若是exec类型,表示那是二个行列语句,能够开始展览运营;假诺是eval类型,表示这是一个10足的表达式语句,能够用来测算相应的值出来;要是是single类型,表示那是2个单一语句,选用互动形式实践,在那种场馆下,若是是二个表明式,壹般会输出结果,而不是打字与印刷为None输出。
  • 可选参数flags和dont_inherit是用来调节编译源码时的注解,能够查阅PEP23陆文书档案来打听这么些参数,以及有关编写翻译的证实。假若两岸选取缺省参数(也即双方都是零值),在调用本函数编写翻译时,首要运用代码中指明的编译特征来比较;假诺flags参数设置有值,而dont_inherit未有设置(便是零值),那么编写翻译代码时,不仅源码的编写翻译特征起作用,而且flags指明的风味也起效果,至极两者的并集;假如参数dont_inherit设置有值(就是非零值),编写翻译语句时唯有参数flags指明的编写翻译特征值起成效,正是不行使源码里指明的风味。
  • 编写翻译特征是按位图的艺术设置到参数里,能够查阅__future__
  • 可选参数optimize是用来指明编写翻译器使用优化的品级;缺省值是-一,表示使用命令行参数-O中收获的优化等第为准;假如设置值为0(正是不用优化,debug是设置true),是平素不优化;假如设置值为一,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地图