创建代理访问.NET WebServices

日期: 2007-12-04 来源:TechTarget中国

  创建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;
}

}

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

  在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属性。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐