创建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中国
相关推荐
-
.NET架构师:函数式语言做领域驱动设计
Scott一位.NET架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,对于Scott来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。
-
软件开发就像炒股 关键看你怎么选股票!
本文作者Paulo Ortins在这里分享了对于选择哪种编程语言作为软件开发工作的起点的话题,并阐述了自己的观点。
-
增进离岸Java开发效率的十个提示
近日,Cygnet Infotech公司发布了一篇博文,谈到了如何增进离岸Java开发的效率。众多的ISV与软件厂商总是在不断寻找能以最低的代价实现其业务目标的解决方案。
-
Visual Studio 2013增强调试功能
Visual Studio 2013包含了若干诊断特性,能够帮助开发人员有效地调试他们的应用程序。