webservice匿名訪問
A. 本解決方案的WebService程序 如何啟動
WebService,即Web服務,能使得運行在不同機器上的不同應用無須藉助,專門的第三方軟體或硬體,就可相互交換數據或集成.
第一次選擇WebService,是為了替代資料庫遠程連接.我們都知道當SQL允許遠程時,則要打開某一埠.但這一點在我們已經部署好的伺服器上,卻是不被允許的,於是就選擇WebService來代替了.當然現在我們也可以選擇WCF來完成.不過這不是我們今天的主題.
WebService返回的數據為XML,這是我們都很熟悉的一種數據方式,大大方便了我們的工作當然,WebService給我們帶來的好處遠不止這些.我不想講得更多.相信當你能夠熟練運用WebService後,你會發現這是一把鋒利的寶刃.
對於初次接觸WebServcie的人來說,長篇理論,不如一個實例來得更實際些,我們更看重的是到底如何能夠創建一個WebService並且將其部署,和使用.
下面我將逐步的完成一個加減乘除功能的WebServic.
開發環境:VS2012
IIS環境:WINSERVER2008R2 IIS7.5
第一步:打開VS2012,新建空項目,注意選擇.NET Framework的版本.這里我選擇的是.NET Framework 4
新建好項目後,在項目中添加一個WebService項
打開這個文件,我們可以看到,代碼如下
[csharp] view plain print?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace CalculateService
{
/// <summary>
/// WebService1 的摘要說明
/// </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 CalCulService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
}
將HellowWorld這段代碼刪除,修改後如下
[csharp] view plain print?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace CalculateService
{
/// <summary>
/// CalCulService 的摘要說明
/// </summary>
[WebService(Namespace = "http://login.wxjy.info")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消注釋以下行。
// [System.Web.Script.Services.ScriptService]
public class CalCulService : System.Web.Services.WebService
{
[WebMethod]
public int Sum(int a, int b)
{
return a + b;
}
[WebMethod]
public int Sub(int a, int b)
{
return a - b;
}
[WebMethod]
public double Mult(double a, double b)
{
return a * b;
}
[WebMethod]
public double Div(double a, double b)
{
return a / b;
}
}
}
此時,我們已經完成這個WebService的代碼部分.接下來我們要將這個WebService打包發布
在項目上點擊右鍵,點擊菜單中的發布
此時出現如下頁面
點擊下拉菜單選擇新建配置文件
完成以上步驟後,我們可以在設置文件生成的文件夾內看到生成的以下文件
現在我們要將生成的文件拷貝到已經部署好的IIS伺服器上:在伺服器上新建文件夾,將文件拷貝至文件夾內,並且為文件夾設置匿名許可權.
現在我們在IIS中添加網站
需要注意的是:我們的這個WebService是基於.NET 4開發的.如果你的IIS默認使用的是.NET 2.0,那麼發布後將會出現異常,而無法訪問.
查看一下應用程序池的右邊的應用程序池默認設置
提供兩種解決方案:第一種,在上面的表格中,將應用程序池默認改為4.0即可.當然這是指你的IIS中沒有需要2.0的應用程序和網站.
如果你的IIS中還有其它的需要.NET 2.0的應用程序,這時候你可以選擇第二個辦法
首先添加一個應用程序池
然後添加網站,將網站的應用程序池改為新建的應用程序池
當然,我們也可以將這個項目的.NET版本改為3.5,然後重新打包發布.那麼就不需要添加對4.0的支持了.
添加完畢,啟動網站,此時可以關閉與伺服器的連接了.
在本地的瀏覽器中輸入地址
http://xxx.xxx.com/calculservice.asmx
此時我們可以看到以下的界面
此時我們已經完成了這個WebService的創建和部署.接下來,我們要在本地使用它
打開VS2012,新建項目,項目名為TestCalCul
在項目中添加新建項
在項目中引用項上點擊右鍵,選擇添加服務引用,顯示界面如下:
點擊左下角的高級,出現界面如下
點擊添加Web引用,出現界面如下
在URL中輸入我們發布的WebService的URL地址,系統會自動搜索到服務.並且為Web引用設置一個引用名.此引用名將是我們在項目中引用這個服務的命名空間
點擊添加引用,引用完成.
接下來,我們在WebForm1的cs文件中寫如下代碼
[csharp] view plain print?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//不要忘記為WebService添加using引用
using TestCalCul.MyWebService;
namespace TestCalCul
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CalCulService cal = new CalCulService();
double a = 29755;
double b = 112.58;
Response.Write(cal.Mult(a, b).ToString());
}
}
}
接下來,在瀏覽器中運行該項目.可以看到如下結果
此時我們已經完成了這個WebService的使用過程
其實,這個實例在開發中,沒有任何意義.
但是通過這個實例,我們可以看出WebService的復用性,簡單性是非常好的.
在VS的環境下,我們可以輕易完成一個WebService的開發過程.
而WebService返回給我們的XML數據方式,也可以充分的和JavaScript等任何一種可以處理XML的語言相結合來
完成我們的需求.
在這里要注意,當WebService連接資料庫時,我們要適當的給WebService進行加密.
加密的方式很多,你可以通過在IIS伺服器上禁止匿名訪問來實現,也可以給WebService的驗證增加驗證內容,最
簡單的就是加上用戶名和密碼.
還要注意,不要用有含義的方法名稱,比如Login或者PayOrder等,回傳數據不要使用bool值,盡量使用字元串來替
B. 別人通過wsdl地址調用我webservice時,出下圖提示但我並沒有設置Windows驗證在服務中沒添加賬號密碼驗證
在解決方案裡面右鍵->添加WEB引用,然後把對方提供的WSDL文件的URL輸入進去.然後VS會查找到這個WSDL,然後你點確定,就會在本地生成你要用的WEBSERVICE印射類了.然後直接使用就可以了.
C. 如何webservice可以匿名訪問
webservice介面地址是:http://webservice.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx
wsdl路徑是:http://webservice.webxml.com.cn/webservices/ChinaTVprogramWebService.asmx?wsdl
一般地方告訴你webservice介面地址,在後面加上?wsdl即為wsdl地址。
方法二:soap方式
這里並不是嚴格意義上的純soap訪問。
加上頭,以及請求的部分,代碼如下,就不多介紹了。自己對照圖片看,很好理解。