澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 在线运行

原标题:在线运行

浏览次数:132 时间:2019-09-15

初步完成c#代码的在线编辑。    

在帮客户写JAVA客户端访问.NET实现的Web service的示例代码发现了一个有趣的问题。为有保障安全性,使用了wse2.0 sp2的ws-security,自己实现了UsernameTokenManager的AuthenticateToken方法。当从本机的浏览器访问该服务时,返回HTTP 500错误。写了一个winform客户端的测试代码,当使用不正确的用户名与密码时,服务抛出错误,使用正确的用户名与密码时,服务返回正确的结果,一切看起来都很正常。但当使用java的客户端访问时,无论使用什么样的客户名与密码,服务均能正确返回结果。不知道是否WSE2.0的bug还是设置的问题,让jeet很是郁闷。
示例代码如下:
1、WEB service代码:

澳门在线威尼斯官方 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

 

2、实现UsernameTokenManager

首先,传回前端的c#在线代码,进行预编译,用CSharpCodeProvider这个方法。设置编译版本3.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

设置编译参数GenerateInMemory:是否在内存运行,True - memory generation, false - external file generation。

3、Web service的web.config配置

设置生成执行文件的类型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 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
澳门在线威尼斯官方 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>

编译后返回result结果。

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

 

澳门在线威尼斯官方 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

澳门在线威尼斯官方 408

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

异常处理:如果编译时发生错误,生成错误编号和错误文本信息并返回给前端。

澳门在线威尼斯官方 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

 

澳门在线威尼斯官方 481

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

返回结果。

 

运行示例

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:在线运行

关键词:

上一篇:没有了

下一篇:没有了