参考:http://www.dfwlt.com/forum.php?mod=viewthread&tid=424
介绍
在这篇文章中,我将解释我们如何发布SQL Server 2005的存储过程作为Web服务,并从微软VB.NET Windows应用程序访问该Web服务。
背景
微软开始为SQL Server实现对XML的支持,需要从SQL Server 2000版本的开始。 SQL Server 2000的最初版本附带了许多XML功能。后来,微软发布SQLXML 3.0为SQL存储过程和SQL函数以及web服务。
我们不再需要SQLXML 3.0 ,因为SQL Server 2005的版本本身支持这个。
如何发布您的存储过程作为一个web服务?
发布您的存储过程作为Web服务是很容易的,步骤很简单。
首先我们创建一个存储过程GetProducts,
-
Create PROC GetProduct ( @ProductId int ) As Select * from Products where ProductId =@ProductId
在接下来的步骤中,我们将看到我们如何可以将GetProduct作为一个web服务。我们将使用CREATE ENDPOINT TSQL语句来实现。Endpoint是代表一个服务器端和客户端,或通过它的SQL Server与外部通信对象通信。
SQL Server 2005中存在几种访问协议(TCP / IP,共享内存,命名管道,VIA),创建Endpoint可以使用下面的任何一种协议。 HTTP的Endpoint类型将启用SQL Server提供web服务的支持。
要发布我们的存储过程作为web服务,我们将创建一个HTTP的Endpoint来将存储过程发布为Web。
-
CREATE ENDPOINT WebServiceTest AUTHORIZATION [sa] STATE = STARTED AS HTTP ( AUTHENTICATION = (INTEGRATED), PATH = '/MyTestWebservicepath/', PORTS = (CLEAR), CLEAR_PORT = 8045, SITE = '*', ) FOR SOAP ( WEBMETHOD 'urn:www.codeproject.com'.'GetProduct' ( NAME = 'Northwind.dbo.GetProduct', SCHEMA = STANDARD, FORMAT = ALL_RESULTS ), WSDL = DEFAULT, BATCHES = DISABLED, SCHEMA = STANDARD, LOGIN_TYPE = WINDOWS, SESSION_TIMEOUT = 100, DATABASE = 'Northwind', NAMESPACE = 'www.codeproject.com', CHARACTER_SET = XML )
您可以添加任意数量的存储过程的HTTP的Endpoint。
以下语法是添加新的存储过程作为Web方法到现有的Endpoint:
ALTER ENDPOINT sql_endpoint FOR SOAP (ADD WEBMETHOD 'YourWebMethod' (name='Northwind.dbo.YourWebMethod'));
下面的脚本可以供大家参考,是创建Endpoint的语法
CREATE ENDPOINT Name-Of-The-Endpoint [AUTHORIZATION login information to sqlserver ] STATE = { STARTED | STOPPED | DISABLED } AS HTTP ( PATH = 'PATH-TO-ACCES-WEBSERVICE-(YOUR SERVER NAMEPATH WILL BE THE ACTUAL URL)', AUTHENTICATION =( { BASIC | DIGEST | INTEGRATED | NTLM | KERBEROS } [ ,...n ] ), PORTS = ( { CLEAR | SSL} [ ,... n ] ) [ SITE = {'*' | '+' | 'WEBSITE' },] [, CLEAR_PORT = CLEARPORT ] [, SSL_PORT = SSLPORT ] [, AUTH_REALM = { 'REALM' | NONE } ] [, DEFAULT_LOGON_DOMAIN = { 'DOMAIN' | NONE } ] [, RESTRICT_IP = { NONE | ALL } ] [, COMPRESSION = { ENABLED | DISABLED } ] [, EXCEPT_IP = (ALL | ( 4-part-ip ) | ( "ip_address_v6" ) ) ) FOR SOAP ( [ { WEBMETHOD [ NAMESPACE.] 'method_alias' ( NAME = 'database.Schema.name' [ , SCHEMA = { NONE | STANDARD | DEFAULT } ] [ , FORMAT = { ALL_RESULTS | ROWSETS_ONLY } ] ) } [ ,...n ] ] [ BATCHES = { ENABLED | DISABLED } ] [ , WSDL = { NONE | DEFAULT | 'PROCEDURE NAME' } ] [ , SESSIONS = { ENABLED | DISABLED } ] [ , LOGIN_TYPE = { MIXED | WINDOWS } ] [ , SESSION_TIMEOUT = TIME-INRTERVEL | NEVER ] [ , DATABASE = { 'DATABASE-NAME' | DEFAULT } [ , NAMESPACE = { 'namespace' | DEFAULT } ] [ , SCHEMA = { NONE | STANDARD } ] [ , CHARACTER_SET = { SQL | XML }] [ , MAX_SOAP_HEADERS_SIZE = { int | DEFAULT }] )
创建好后,我们的WSDL地址是:http://localhost:8045/MyTestWebservicepath.wsdl。
PATH = '/MyTestWebservicepath/', PORTS = (CLEAR), CLEAR_PORT = 8045,
这个就是webservice的名称和端口。
如果调用这个WebService就不讲了,如果对WebService访问有问题的,可以到网络上去查询。