开班形成c#代码的在线编辑。    

在帮客户写JAVA客户端访问.NET达成的Web
service的言传身教代码发现了一个有趣的标题。为有保证安全性,使用了wse2.0
sp贰的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()

金沙注册送58 1

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

金沙注册送58 104using System;
金沙注册送58 105using Microsoft.Web.Services2;
金沙注册送58 106using Microsoft.Web.Services2.Security;
金沙注册送58 107using Microsoft.Web.Services2.Security.Tokens;
金沙注册送58 108using System.Security;
金沙注册送58 109using System.Security.Permissions;
金沙注册送58 110
金沙注册送58 111namespace WebTest
金沙注册送58 112金沙注册送58 113金沙注册送58 114{
金沙注册送58 115金沙注册送58 116    /**//// <summary>
金沙注册送58 117    /// CustomUsernameTokenManager 的摘要表达。
金沙注册送58 118    /// </summary>
金沙注册送58 119    [SecurityPermission(SecurityAction.Demand,
金沙注册送58 120         Flags= SecurityPermissionFlag.UnmanagedCode)]
金沙注册送58 121
金沙注册送58 122    public class CustomUsernameTokenManager:UsernameTokenManager
金沙注册送58 123金沙注册送58 124    金沙注册送58 125停放函数,动态编写翻译。{
金沙注册送58 126        public CustomUsernameTokenManager()
金沙注册送58 127金沙注册送58 128        金沙注册送58 129{
金沙注册送58 130            //
金沙注册送58 131            // TODO: 在此间增加构造函数逻辑
金沙注册送58 132            //
金沙注册送58 133        }
金沙注册送58 134
金沙注册送58 135        protected override string AuthenticateToken(UsernameToken token)
金沙注册送58 136金沙注册送58 137        金沙注册送58 138{
金沙注册送58 139            if(token==null)
金沙注册送58 140                throw new ArgumentNullException();
金沙注册送58 141            if(token.Username==”username”)
金沙注册送58 142                return “password”;
金沙注册送58 143            else
金沙注册送58 144                return “love”;
金沙注册送58 145            
金沙注册送58 146//                byte[] encodedUsername=System.Text.Encoding.UTF8.GetBytes(token.Username);
金沙注册送58 147//                if(System.Text.Encoding.UTF8.GetString(encodedUsername)==”username”)
金沙注册送58 148//                    return “password”;
金沙注册送58 149//            else
金沙注册送58 150//                    return “love”;
金沙注册送58 151
金沙注册送58 152        }
金沙注册送58 153
金沙注册送58 154    }
金沙注册送58 155}
金沙注册送58 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。

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

  CodeDomProvider只是1个抽象类而已,对于差别的程序语言,有照应的类去承袭这些抽象类,C#的正是C夏普CodeProvider类。用于编写翻译的主意有八个,方法的表明如下

class bool([x]金沙注册送58 ,)

回到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

 

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

金沙注册送58 408

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

  上面用到的是CompileAssemblyFromSource,传进去第3个参数是亟需编写翻译的代码字符串。而第一个办法传入的参数是内需编写翻译的代码文件名。以上多少个主意都回去同三个值——一个CompilerResults的实例。经常那么些示例能够清楚编写翻译是不是通过,要是失利了不当的代码的职位,更关键的是可以赢得编写翻译成功的主次集。当编写翻译成功之后,要么就透过反射来调用生成好的事物,要么就径直打开进度去实践exe。

callabel(object)

丰盛处理:假若编译时产生错误,生成错误编号和不当文本音讯并赶回给前端。

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

类装饰器

金沙注册送58 481

 

@staticmethod()

静态方法

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

  下边代码作者感到的第3在于构造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是读取字符串的公文对象,假诺不是从文件里读取源码来编写翻译,那么那里能够放1些用来标记那些代码的字符串。
  • 参数mode是用来指明那种表示的源码类型;假若是exec类型,表示那是一个行列语句,能够举办运行;如若是eval类型,表示这是3个10足的表明式语句,能够用来测算相应的值出来;就算是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)

再次回到结果。

金沙注册送58 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小程序

金沙注册送58 483

 

工作有成运营示例

金沙注册送58 484

 

不当运维示例,报错新闻显示。

金沙注册送58 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地图