新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → [求助]看用wsdl.exe把wsdl文件生成客户端代理类的一个例子所遇到的很多疑问 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3749 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [求助]看用wsdl.exe把wsdl文件生成客户端代理类的一个例子所遇到的很多疑问 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     myname2 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:54
      门派:XML.ORG.CN
      注册:2004/10/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给myname2发送一个短消息 把myname2加入好友 查看myname2的个人资料 搜索myname2在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看myname2的博客楼主
    发贴心情 [求助]看用wsdl.exe把wsdl文件生成客户端代理类的一个例子所遇到的很多疑问


    学习创建XML Web services时看到这个例子,这个服务是分析matchserver.html页的内容并返回数据.
    他先是建立了一个服务说明文档.wsdl文件,然后用wsdl.exe生成了代理类,然后有个窗体页.aspx,可以通过点击该页上的一个button就可以看到返回的数据.

    我看了用wsdl.exe自动生成的.vb文件,如下:

    **********************
    Option Strict Off
    Option Explicit On

    Imports System
    Imports System.ComponentModel
    Imports System.Diagnostics
    Imports System.Web.Services
    Imports System.Web.Services.Protocols
    Imports System.Xml.Serialization

    '
    '此源代码由 wsdl, Version=1.1.4322.573 自动生成。
    '

    '<remarks/>
    <System.Diagnostics.DebuggerStepThroughAttribute(),  _
    System.ComponentModel.DesignerCategoryAttribute("code")>  _
    Public Class TestIt
        Inherits System.Web.Services.Protocols.HttpGetClientProtocol
        
        '<remarks/>
        Public Sub New()
            MyBase.New
            Me.Url = "http://localhost"
        End Sub
        
        '<remarks/>
        <System.Web.Services.Protocols.HttpMethodAttribute(GetType(System.Web.Services.Protocols.TextReturnReader), GetType(System.Web.Services.Protocols.UrlParameterWriter))>  _
        Public Function TestHeaders() As TestHeadersMatches
            Return CType(Me.Invoke("TestHeaders", (Me.Url + "/QuickStart1/MatchServer.html"), New Object(-1) {}),TestHeadersMatches)
        End Function
        
        '<remarks/>
        Public Function BeginTestHeaders(ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult
            Return Me.BeginInvoke("TestHeaders", (Me.Url + "/QuickStart1/MatchServer.html"), New Object(-1) {}, callback, asyncState)
        End Function
        
        '<remarks/>
        Public Function EndTestHeaders(ByVal asyncResult As System.IAsyncResult) As TestHeadersMatches
            Return CType(Me.EndInvoke(asyncResult),TestHeadersMatches)
        End Function
    End Class

    Public Class TestHeadersMatches
        
        <System.Web.Services.Protocols.MatchAttribute("TITLE>(.*?)<")>  _
        Public Title As String
        
        <System.Web.Services.Protocols.MatchAttribute("H1>(.*?)<")>  _
        Public H1 As String
    End Class
    **********************
    我对其中的testheadersmatches这个类怎么来的不是很理解.
    象类 TestIt 我知道是在.wsdl文件里的service name="TestIt"有定义,而TestHeaders方法在.wsdl文件里的operation name="TestHeaders" 有定义.那testheadersmatches是在wsdl文件里的什么地方定义的呢?

    .wsdl文件如下:
    ************************
    <?xml version="1.0"?>
    <definitions xmlns:s="http://www.w3.org/1999/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:s0="http://tempuri.org/">
      <message name="TestHeadersHttpGetIn"/>
      <message name="TestHeadersHttpGetOut">
        <part name="Body" type="s:string"/>
      </message>
      <portType name="TestItHttpGet">          
        <operation name="TestHeaders">
          <input message="s0:TestHeadersHttpGetIn"/>
          <output message="s0:TestHeadersHttpGetOut"/>
        </operation>
      </portType>
      <binding name="TestItHttpGet" type="s0:TestItHttpGet">
        <http:binding verb="GET"/>
        <operation name="TestHeaders">
          <http:operation location="/QuickStart1/MatchServer.html"/>
          <input>
            <http:urlEncoded/>
          </input>
          <output>
             <text xmlns="http://microsoft.com/wsdl/mime/textMatching/">
              <match name='Title' pattern='TITLE&gt;(.*?)&lt;'/>
              <match name='H1' pattern='H1&gt;(.*?)&lt;'/>
      </text>
          </output>
        </operation>
      </binding>
      <service name="TestIt">
        <port name="TestItHttpGet" binding="s0:TestItHttpGet">
          <http:address location="http://localhost" />
        </port>
      </service>
    </definitions>
    **************************
    其实我还是对wsdl文件里<binding>部分的一些元素不太理解.比如说上面这个文件定义了两个消息,其中的TestHeadersHttpGetIn没有part部分,把它作为请求消息发送给服务时,服务到底收到了什么内容;而TestHeadersHttpGetOut有part部分,类型为string,把它作为响应消息,那它从服务返回时带回的内容是什么?我又是通过什么方法接收的呢?

    另外在<input>块里的<http:urlEncoded/>它到底把什么进行编码了?
    而<output>块里的
    <text xmlns="http://microsoft.com/wsdl/mime/textMatching/">
    <match name='Title' pattern='TITLE&gt;(.*?)&lt;'/>
    <match name='H1' pattern='H1&gt;(.*?)&lt;'/>
    </text>
    text、match这些元素又其什么作用呢,他们是什么类型的呢?

    还有命名空间是不是都有一个架构文件呢?象上面这个xmlns="http://microsoft.com/wsdl/mime/textMatching/",怎么看不到呢?


    aspx文件如下:
    ********************
    <html>

    <script language="VB" runat="server">

        Sub GetQuote(Src As Object, E As EventArgs)
            Try
                Dim matcher As New TestIt()
                Dim matches As TestHeadersMatches
                matches = matcher.TestHeaders()
                Title.InnerHtml = matches.Title
                H1.InnerHtml = matches.H1
       
                StockDetails.Visible = true
            Catch Exc As Exception
                Message.InnerHtml = "A network error occured or the service was unable to locate the symbol, please try again."
            End Try
        End Sub

    </script>

    <body bgcolor="ffffee" style="font: 10pt verdana">

      <h4>Using Html Text Pattern Matching Sample</h4>

      <form runat="server">
        <table style="font: 10pt verdana" width="300">
          <tr>
            <td></td>
            <td><input type="submit" OnServerClick="GetQuote" runat="server"/></td>
          </tr>
        </table>
        <p>
        <hr>
        <p>
        <table id="StockDetails" visible="false" runat="server" style="font: 8pt verdana" border=1>
          <tr>
            <td><b>Company Name</b></td>
            <td><span id="Title" runat="server"/></td>
          </tr>
          <tr>
            <td><b>H1 Text</b></td>
            <td><span id="H1" runat="server"/></td>
          </tr>
           
        </table>
        <p>
        <span id="Message" EnableViewState="false" runat="server"/>
        <p>
      </form>

    </body>
    </html>
    ********************************

    matchservice.html文件如下:
    ********************************
    <HTML>
    <HEAD>
    <TITLE>Hello!</TITLE>
    </HEAD>

    <BODY>
    <H1>Hi Again!</H1>
    </BODY>
    </HTML>
    *********************************


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/30 12:07:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/6 23:19:04

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    6,687.500ms