zoukankan      html  css  js  c++  java
  • 创建代理访问.NET WebServices

     

    作者: ,  出处:CSDN, 
     
      这里我将说明如何在.NET中创建一个代理来访问.NET Web service。我还会生成并注册了一个可以在VB6中使用的代理组件。最后,我会给出在VB6中使用该代理的示例代码。

      创建Web service

      .NET为架设与访问Web services做了许多内部工作,因此我使用.NET来创建一个Web service。我依靠ASP.NET Web Matrix's Web Service Proxy Generator来生成程序代码(生成代码的作用是在.NET中访问Web Service)。在菜单的“Tools”选项中,选择“Web Service Proxy Generator”。要完成该步骤你必须输入的信息有WSDL URL,代理的命名空间,输出目录以及源代码文件的名称。WSDL URL只不过是你的.asmx Web service文件的URL。你可以选择任意的命名空间,不过最好保持其一致性。例如,我的命名空间被设置为MyWebServiceProxy,并使用UserServiceProxy.cs作为源文件的名称。考虑到我接下来将创建一个.NET工程并加入这个文件,我使用的输出目录与即将创建的工程所在目录一致(注意:不要生成汇编文件)。

      开始创建工程

      现在可以在in Visual Studio .NET中创建一个新的工程了。这个工程的输出类型应当被设置为Class Library工程。我将其我的工程命名为MyWebServiceProxy。在这个工程里,我加入了源文件UserServiceProxy.cs。此外,我还改变了这个类中的一些可见性声明。最后的代码与列表A中的类似。

      列表A:

    namespace MyWebServiceProxy {
    using System.Diagnostics;
    using System.Xml.Serialization;
    using System;
    using System.Web.Services.Protocols;
    using System.ComponentModel;
    using System.Web.Services;

    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="UserServiceSoap",
    Namespace="http://tempuri.org/")]
    public class UserService :
    System.Web.Services.Protocols.SoapHttpClientProtocol {

    public UserService() {
    this.Url = "http://localhost/MyWebService/UserService.asmx";
    }

    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/
    GetUser", RequestNamespace="http://tempuri.org/",
    ResponseNamespace="http://tempuri.org/",
    Use=System.Web.Services.Description.SoapBindingUse.Literal,
    ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public User GetUser(intuserId) {
    object[] results = this.Invoke("GetUser", new object[] {
    userId});
    return ((User)(results[0]));
    }

    private System.IAsyncResultBeginGetUser(intuserId,
    System.AsyncCallback callback, object asyncState) {
    return this.BeginInvoke("GetUser", new object[] {
    userId}, callback, asyncState);
    }

    private User EndGetUser(System.IAsyncResultasyncResult) {
    object[] results = this.EndInvoke(asyncResult);
    return ((User)(results[0]));
    }
    }

    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
    public class User {

    public string UserId;
    public string FirstName;
    public string LastName;
    }

    }

      这里我将说明如何在.NET中创建一个代理来访问.NET Web service。我还会生成并注册了一个可以在VB6中使用的代理组件。最后,我会给出在VB6中使用该代理的示例代码。

      接下来,按照以下的步骤:

      在Project Explorer上点击鼠标右键,选择“Properties”。在“Configuration Properties | Build”标签栏,将“Register For COM Interop”选项设置为True。

      为了生成这个工程,你要在VB6中创建一个新的Standard EXE工程。

      为MyWebServiceProxy类型库添加一个引用。

      在默认的窗体上,加入一个CommandButton控件。

      在这个CommandButton控件的Click事件中,加入以下的代码:

      IntelliSense为你提供了MyWebServiceProxy的公共类;但是,你还不能使用这些类的成员(比如,GetUser() 方法, 等等)。这并不意味着你不能使用它们。这仅仅表示你必须通过引用或者指针。你还可以通过实现一个接口来解决这个问题(这可能是一个更巧妙的解决方法,但是就这篇文章的目的而言,这样做没有必要)。

      运行这段代码并查看你的运行结果。如果每个步骤都是正确完成的,你应该可以看到一个消息框,显示id为1的用户的名字与姓氏。

      克服安全性障碍

      你可以遇到的最大障碍就是安全性。如果你遇到一个“访问拒绝”错误,你会有两个选项。第一是模仿IIS中的匿名账户。在你的Web service中的web.config里,一定要加入Identity结点并将Impersonate属性设置为True。在Internet Services Manager中,改变你.asmx文件的安全属性。设置系统的匿名用户或者域用户以使其有足够的权限来访问Web service所必需的资源。如果这一切都失败了,就使用一个管理员账号来进行本次练习。再次运行代码并查看运行结果。

      另外一个选项是在web.config文件的Identity结点里设置userName以及 password属性。同样,将其设置为一个权限合适的账号。另外,别忘了包含impersonate属性。

  • 相关阅读:
    登录保存用户信息
    GRIDVIEW单击事件
    GRIDVIEW单击双击事件
    gridview打印
    水晶报表
    CRYSTAL net样式
    Web Server 在IIS上部署ASP.NET Core项目
    MVC MVC+EF快速搭建
    MVC MVC常见错误及解决办法
    Open Interface Service WCF三种通信模式
  • 原文地址:https://www.cnblogs.com/godwar/p/988075.html
Copyright © 2011-2022 走看看