如果用存儲過程來調用webservice
那存儲過程的功能感覺能做好多事情了?
別自欺欺人了、那些功能還是webservice來實現的...
完整的webservice代碼:(也是默認的,新建.asmx文件的時候就有的:)

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; namespace webservice { /// <summary> /// service 的摘要說明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消注釋以下行。 //[System.Web.Script.Services.ScriptService] public class service : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { return "Hello World"; } } }
http://localhost:44786/service.asmx
具體的頁面(路徑:http://localhost:44786/service.asmx/HelloWorld)
好吧·默認的一個服務就是的...下面開始講下重點...如果用存儲過程來調用這個服務...

1 USE [master] 2 GO 3 /****** Object: StoredProcedure [dbo].[U_CallWebService] Script Date: 11/04/2016 09:57:35 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET QUOTED_IDENTIFIER ON 7 GO 8 Create PROCEDURE [dbo].[U_CallWebService] 9 @parameter varchar(200)--這個現在用不到,以后如果需要參數的話需要的.... 10 AS 11 BEGIN 12 DECLARE @OBJ INT 13 DECLARE @URL VARCHAR(500) 14 DECLARE @RESPONSE VARCHAR(3000) 15 DECLARE @RET VARCHAR(1000) 16 17 SET @URL ='http://localhost:44786/service.asmx/HelloWorld' 18 EXEC SP_OACREATE 'MSXML2.ServerXMLHttp',@OBJ OUT 19 EXEC SP_OAMETHOD @OBJ,'Open',NULL,'post',@URL,FALSE 20 EXEC SP_OAMETHOD @OBJ,'send' 21 --@RET : 0(成功)或非零數字(失敗),是由 OLE 自動化對象返回的 HRESULT 整數值。 22 EXEC @RET = SP_OAGETPROPERTY @OBJ,'responseText',@RESPONSE OUT 23 IF @RET <> 0 24 BEGIN 25 EXEC sp_OAGetErrorInfo @OBJ 26 END 27 select @RET AS 'ret(0即成功)' 28 --原本以為這個[d]是返回數據中的一個值(例如這樣{"d":"Hello World"}),是必須寫[d]的 29 --正確的解釋是:這個[d]是SELECT 的一個列名,和SELECT GETDATE() AS TIME 中的TIME是一樣性質的.指定列名; 30 SELECT @RESPONSE--這個是(無列名) 31 SELECT @RESPONSE[d] 32 SELECT @RESPONSE AS 'd'--SELECT @RESPONSE[d] 等於SELECT @RESPONSE AS 'd' 33 --釋放、銷毀 34 EXEC SP_OADESTROY @OBJ 35 36 END
在運行下就可以看到效果了...
不足之處:
0001.<code>EXEC @RET = SP_OAGETPROPERTY @OBJ,'responseText',@RESPONSE OUT</code>
'responseText'即屬性值,如果不知道會報錯:
Error Source Description HelpFile HelpID
0x80020006 ODSOLE Extended Procedure 未知名稱。 NULL 0
<我調用WCF的時候,調試都可以看到確實運行我的本地WCF的一個服務了,但是這個返回值因為不知道屬性名獲取不到!>
0010.貌似字符超過8000就會報錯...還是4000?總之不能太長...
擴展:
至今還不知道調用WCF的那個屬性值是什么!!!
望有搞過這塊的不吝(Lin)賜教...
附:
微軟關於錯誤的解決辦法(都是English):https://support.microsoft.com/en-us/kb/325492