** 应用 WSDK - 实践 WebServices 的路由和路由选择 **
小气的神
2002-11-18
Article Type: In-Depth
难度等级: 8/9
版本: 3.46
不久之前,我想我们曾经讨论过有关 WSDK 问题,那时我们讨论的是有关 DIME 的问题。而当我努力的试图调试 WSDK 中接下来的功能时,我遇到了一些问题,简单的说,我总是无法实现 SOAP 的简单路由,而出现的错误是让我有些沮丧的,几乎是反反复复的 Service Unavailable 错误,更详细的是说我的 ”System.UnauthorizedAccessException: Access to the path "xxxxxx.config" is denied.” 我放大了 ASP.NET 的权限到一个让我感到吃惊的高度,但是错误依旧,我有些沮丧了,之后我的 Windows.NET 终于过期了,一个新的起点在被迫中开始了,因为我需要重新安装我的系统。
之后 WSDK 也发生了变化,因为当我拿到下一个版本的之后,所有的命名空间发生了变化,我在网络上的讨论组看到同样的论点,并且可靠的消息说这次变化之后会一直延续到 WSDK 的正式版本发布。传说是从 builds 5217 这个版本之后不再兼容以前版本的命名。具体的说,发生这样的变化:
Microsoft.WSDK.* -> Microsoft.Web.Services.*
Microsoft.WSDK.dll -> Microsoft.Web.Services.dll
Microsoft.WSDK.WSDKClientProtocol-> Microsoft.Web.Services.WebServicesClientProtocol
Microsoft.WSDK.WSDKExtension ->Microsoft.Web.Services.WebServicesExtension
Microsoft.WSDK.Configuration.WSDKConfiguration->Microsoft.Web.Services.Configuration.WebServicesConfiguration
Microsoft.WSDK.Configuration.Install.WSDKInstaller->Microsoft.Web.Services.Configuration.Install.WebServicesInstaller
1<microsoft.wsdk> -> <microsoft.web.services>
2
3简单的说,就是所有的 WSDK 改变成了 Web.Services ,修改命名空间的沮丧带来了新的变化,之后很快我发现之前我遇到的问题解决了,因为问题如同秋天般的消失了,我不知道是新版本的问题,还是我重新安装了系统的问题,不过那一时刻我是快乐的 J
4
5好吧,依然理一下我们的思路,开始今天的 WSDK 的应用之旅。简单的说我们需要经过一个路由选择获得我们真正需要的资源。这主要用于我们分布式的应用中,比如我们请求一个虚拟的命名资源,然后我们的服务器根据服务器上的映射定义,选择真正存在的资源,然后返回给我们相应的功能。这么说太不专业了 J ,但我希望能清楚的说明路由 (Route) 和选举 (referral) 的解释。也就是说我们在经过 DIME 之后,今天会着重来看一下 WS-Routing 和 WS-Referral 协议的应用。
6
7具体的说会是这样:
8
91\. 客户请求一个不存在的资源链接请求 InputQuestion.asmx
10
112\. 我们的 Server 使用 HttpHandlers 找到我们预先定义的资源的定义 Response.asmx 并将请求返回
12
133\. 客户获得服务器端返回的 Web Services 描述信息。并且调用方法或功能。
14
154\. Server 返回相应功能调用的结果。
16
17用图似乎更容易表示:
18
19
20
21好了,我们来具体的看一下,这之前请原谅我的违背,因为这一篇文章中我重新使用了之前我说过的 A+B 的 WebServices ,而上一篇文章我曾调侃的谈论有关 A+B 的 WebServices
22
231\. 我们产生一个 A+B 的 Web Services
24
252\. 加上 WSDK 的路由功能。
26
273\. 定义映射文件和选择
28
294\. 产生客户端,进行测试。
30
31** 1\. ** ** 产生 ** ** A + B ** ** 的 ** ** WebServices ** ** 并加上路由功能 ** ** **
32
33有关产生 A+B 的 Web Services ,我将不再多说。编码测试成功之后我们做下面的工作。
34
35A. 在项目中加入 Microsoft.Web.Services.DLL 的引用
36
37
38
39B. 在 Web.config 中加入 WS-Routing 支持
40
41< webServices >
42
43< soapExtensionTypes >
44
45< add type ="Microsoft.Web.Services.WebServicesExtension,
46
47Microsoft.Web.Services,Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
48
49priority ="1" group ="0"/>
50
51
52
53
54---
55
56C. 编译 Web Services 应用,然后测试。
57
58这里你可以编写一个简单的客户端进行测试,上一篇文章中我也说过用 MSSOAP Trace 进行跟踪的办法,你可以看到往返的 SOAP 信息。
59
60首先产生一个 Proxy 类
61
62cd\Tmp
63
64wsdl /l:cs /out:Math.cs /n:Proxy /urlkey:MathURL
65
66http://localhost/Myproject/WSDK/WSReferral/Math.asmx?WSDL
67
68---
69
70然后也需要加入 Microsoft.Web.Services.DLL 的引用,在产生的 Proxy 类中加入:
71
72using Microsoft.Web.Services ;
73
74然后将继承的父类从原来的 System.Web.Services.Protocols.SoapHttpClientProtocol修改成Microsoft.Web.Services.WebServicesClientProtocol (具体的步骤见前文)
75
76---
77
78之后在客户端的的事件代码中加入,下面的代码:
79
80private void btnAdd_Click( object sender, System.EventArgs e)
81
82{
83
84int a = 0 ;
85
86int b = 0 ;
87
88int result = 0 ;
89
90a = int .Parse( txtA.Text ) ;
91
92b = int .Parse( txtB.Text ) ;
93
94Proxy.Service1 svc = new Proxy.Service1() ;
95
96result = svc.add( a, b ) ;
97
98string Msg = a.ToString() + " + " + b.ToString() + " = " + result.ToString() ;
99
100lblRes.Text = Msg ;
101
102}
103
104---
105
106运行结果如下:
107
108
109
110* * *
111
112特别:
113
114本文原创, CSDN 署名首发,所有文字和图片版权所有。未经授权请勿传播、转载或改编。
115
116如果有问题或建议,请发电子邮件给 [email protected]</microsoft.web.services></microsoft.wsdk>