cwebservice加密
① 關於C# WebService 問題! 懂的朋友進!
you need to add this event to your event handler,
public void onPreRequestHandlerExecute(object obj, EventArgs ea)
{
HttpApplication httpApp = (HttpApplication) obj;
Type t = (httpApp.Context.Handler).GetType();
if((httpApp.Context.Request.ServerVariables["HTTP_SOAPACTION"] != null) | (t.Namespace.ToString() == "System.Web.Services.Protocols"))
{
//......
}
}
Let me know if this will work or not,
② webservice介面密鑰是什麼
1.1.1 驗證碼加密
介面中的驗證碼參數,均需要通過DES + BASE64加密,
1.1.2 報文簽名
通票平台接入端分配一個cp_code和csecret
,雙方均採用如下規則對報文進行簽名:
l 第一步:簽名源串構造規則:將請求參數按照如下規則組織「a=x&b=y&c=z&……」,每一個參數按參數名的自然數序排列。(按字典序排列)
l 第二步:使用HMAC-SHA1加密演算法,將Step1中的到的源串以及實現分配的密鑰(csecret )進行加密;
l 第三步:將Step2中得到的加密字串進行Base64編碼。
簽名密鑰(secret):abcdefghijklmnopqrstuvwx
/**
* 返回簽名之後的JSON對象
*
* @param json原JSON對象
* @param secret密鑰
* @return
* @throws Exception
*/
publicstatic String doSign(JSONObjectjson,String secret) throws Exception {
String baseStr = "";
for (Object key : newTreeSet(json.keySet())) {
baseStr += ("&" + key + "=" + json.get(key));
}
SecretKeySpec key = newSecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
byte[] bytes = mac.doFinal(baseStr.substring(1).getBytes("UTF-8"));
json.put("signature", new String(Base64.encodeBase64(bytes)));
return json.toString();
}
③ 如何在C#中webservice調用方法總結
一、WebService在cs後台程序中的調用
A、通過命名空間和類名直接調用
示例:
WebService ws = new WebService();
string s = ws.HelloWorld();
B、通過添加WEB引用的方式調用,首先添加WEB引用,通過URL指向WEBSERVICE,
指定WEB引用名,假設為KK;
示例:
kk.WebService n = new kk.WebService();
string ss=n.HelloWorld();
二、WebService在前台頁面的JS 調用方法
1、首先通過下面的方法把Webservice在前台引用進來
<asp:ScriptManager runat="server">
<Services>
<asp:ServiceReference Path="WebService.asmx" InlineScript="True" />
</Services>
</asp:ScriptManager>
2、然後就可以通過JS程序進行調用,示例如下:
<script type="text/jscript">
function a()
{
WebService.HelloWorld(onresult);
}
//這里的onresult是回調函數
function onresult(result)
{
alert(result);
}
function b()
{
WebService.add(1,2,onreturn)
}
function onreturn(result)
{
alert(result);
}
//下面的'context'是上下文,可以通過回到函數通過重載的方式獲得;
function c()
{
WebService.div(1,1,onresultC,onerror,'context');
}
function onresultC(res,c)
{
alert(res);
alert(c);
}
//onerror是獲得異常信息的回調函數,下面給出了獲得異常信息的方法
function onerror(error)
{
var a="";
a=String.format("獲取伺服器端異常的具體類型:{0}\t\n獲取詳細的異常描述信息:{1}\t\n獲取造成異常的:{2}\t\n獲取伺服器端異常的堆棧
跟蹤信息:{3}\t\n獲取一個布爾值,表示異常是否是由於網路連接超時造成的{4}",
error.get_exceptionType(),
error.get_message(),
error.get_statusCode(),
error.get_stackTrace(),
error.get_timedOut())
alert(a);
}
a();
b();
c();
</script>
----自寫小例子---
web Service---:
[WebMethod]
public string HelloWorld() {
return "Hello World,wwg";
}
[WebMethod]
public int AddWwg(int a,int b)
{
return a + b;
}
exe---
using CallWebService.localhost; //因為自己沒有定義命名空間
namespace CallWebService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Service serviceWwg = new Service();
int i1 = Int32.Parse(txt1.Text.ToString());
int i2 = Int32.Parse(txt2.Text.ToString());
int iResult = serviceWwg.AddWwg(i1, i2);
lb1.Text = iResult.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
CallWebService.localhost.Service serviceWwg = new CallWebService.localhost.Service();
string strResult = serviceWwg.HelloWorld();
lb1.Text = strResult.ToString();
}
}
}
④ android如何調用SSl(https)加密的C#寫的webservice
0. 准備工作及環境說明
0.1 檢查JDK的環境變數是否正確(略)。我使用的是JDK 1.6
0.2 准備web伺服器,這里選用TOMCAT 6.0
0.3 准備web service服務端和客戶端(略,如果不會寫的話可以用eclipse的工具生成)。
1. 生成證書
這里用到的文件,我們存放在D:/SSL/文件夾內,其中D:/SSL/server/內的文件是要交給伺服器用的,D:/SSL/client/內的文件是要交給客戶端用的。
1.1生成服務端證書
開始-運行-CMD-在dos窗口執行下執行命令:
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname "CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650 -storepass zljzlj -keypass zljzlj
2.so庫保護,http://safe.ijiami.cn/使得C/C++ 層面的代碼安全也得到防護。加上資源文件保護(圖片、音頻等文件的防查看和防修改)、xml 主配文件保護(對主配文件進行二次簽名)、內存保護等措施,可以基本保證App的動態和靜態安全。
Java調用WebService可以直接使用Apache提供的axis.jar自己編寫代碼,或者利用Eclipse自動生成WebService Client代碼,利用其中的Proxy類進行調用。理論上是一樣的,只不過用Eclipse自動生成代碼省事些。
1、編寫代碼方式:
packagecom.yun.test;
importjava.rmi.RemoteException;
importorg.apache.axis.client.Call;
importorg.apache.axis.client.Service;
importorg.apache.axis.message.PrefixedQName;
importorg.apache.axis.message.SOAPHeaderElement;
importcom.cezanne.golden.user.Exception;
importcom.cezanne.golden.user.UserManagerServiceProxy;
importjavax.xml.namespace.QName;
importjava.net.MalformedURLException;
importjavax.xml.rpc.ServiceException;
importjavax.xml.soap.Name;
importjavax.xml.soap.SOAPException;
publicclasstestWebService{
publicstaticStringgetResult()throwsServiceException,MalformedURLException,RemoteException,SOAPException
{
//標識WebService的具體路徑
Stringendpoint="WebService服務地址";
//創建Service實例
Serviceservice=newService();
//通過Service實例創建Call的實例
Callcall=(Call)service.createCall();
//將WebService的服務路徑加入到call實例之中.
call.setTargetEndpointAddress(newjava.net.URL(endpoint));//為Call設置服務的位置
//由於需要認證,故需要設置調用的SOAP頭信息。
NameheaderName=newPrefixedQName(newQName("發布的wsdl里的targetNamespace里的url","string_itemName"));
org.apache.axis.message.SOAPHeaderElementheader=newSOAPHeaderElement(headerName);
header.addTextNode("blablabla");
call.addHeader(header);
//=newSOAPHeaderElement("發布的wsdl里的targetNamespace里的url","SoapHeader");
//soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url");
//try
//{
//soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
//}
//catch(SOAPExceptione)
//{
//e.printStackTrace();
//}
//call.addHeader(soapHeaderElement);
//調用WebService的方法
org.apache.axis.description.OperationDescoper;
org.apache.axis.description.ParameterDescparam;
oper=neworg.apache.axis.description.OperationDesc();
oper.setName("opName");
param=neworg.apache.axis.description.ParameterDesc(newjavax.xml.namespace.QName("","arg0"),org.apache.axis.description.ParameterDesc.IN,newjavax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema","string"),java.lang.String.class,false,false);
param.setOmittable(true);
oper.addParameter(param);
param=neworg.apache.axis.description.ParameterDesc(newjavax.xml.namespace.QName("","arg1"),org.apache.axis.description.ParameterDesc.IN,newjavax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema","string"),java.lang.String.class,false,false);
param.setOmittable(true);
oper.addParameter(param);
param=neworg.apache.axis.description.ParameterDesc(newjavax.xml.namespace.QName("","arg2"),org.apache.axis.description.ParameterDesc.IN,newjavax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema","string"),java.lang.String.class,false,false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(newjavax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema","string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(newjavax.xml.namespace.QName("","return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(neworg.apache.axis.description.FaultDesc(
newjavax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url","Exception"),
"Exception",
newjavax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url","Exception"),
true
));
call.setOperation(oper);
call.setOperationName(newjavax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url","opName"));
//調用WebService,傳入參數
Stringres=(String)call.invoke(newObject[]("arg0","arg1"));
System.out.println("===============");
returnres;
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
try{
System.out.println(getResult());
}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(RemoteExceptione){
e.printStackTrace();
}catch(ServiceExceptione){
e.printStackTrace();
}catch(SOAPExceptione){
e.printStackTrace();
}
}
}
2、利用Eclipse自動生成WebService client代碼就容易多了:
首先,new project,選擇other,在輸入框中輸入Web Service Client,選中搜索後的結果,點擊Next,在Service definition中輸入 WebService的發布地址,點擊Finish
這樣,WebService Client代碼已經生成好了。
接下來寫一個Test類,在main函數中輸入如下代碼:
Stringendpoint="伺服器的WebService的地址";
YourWebServiceNameProxyumsp=newYourWebServiceNameProxy(endpoint);
try{
StringresultStr=umsp.opMethod("arg0","arg1");
System.out.println(resultStr);
}catch(Exceptione){
System.out.println("異常");
e.printStackTrace();
}catch(RemoteExceptione){
System.out.println("RemoteException異常");
e.printStackTrace();
}
⑥ 如何在WebService中使用SSL證書
安裝SSL證書主要將SSL證書配置到伺服器環境。安裝教程:網頁鏈接
目前全球伺服器環境主要分為4個類型:Apache、IIS、Nginx、Tomcat
⑦ 如何用c語言實現基於http的webservice
package com.yun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//標識Web Service的具體路徑
String endpoint = "WebService服務地址";
// 創建 Service實例
Service service = new Service();
// 通過Service實例創建Call的實例
Call call = (Call) service.createCall();
//將Web Service的服務路徑加入到call實例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//為Call設置服務的位置
// 由於需要認證,故需要設置調用的SOAP頭信息。
Name headerName = new PrefixedQName( new QName("發布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("發布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("發布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//調用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("發布的wsdl里的targetNamespace里的url", "opName"));
//調用Web Service,傳入參數
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}
⑧ C/S架構中WebService的問題。
CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支持,並且可以根據實際項目的需要,採用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕松地實現 Web Services 的發布和使用。目前它仍只是 Apache 的一個孵化項目。
Apache CXF 是一個開源的 Services 框架,CXF 幫助您利用 Frontend 編程 API 來構建和開發 Services ,像 JAX-WS 。這些 Services 可以支持多種協議,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,並且可以在多種傳輸協議上運行,比如:HTTP、JMS 或者 JBI,CXF 大大簡化了 Services 的創建,同時它繼承了 XFire 傳統,一樣可以天然地和 Spring 進行無縫集成。
CXF 是一種基於 Servlet 技術的 SOA 應用開發框架,需要 Servlet 容器的支持。CXF 支持在多種 Servlet 容器中運行,包括 WebSphere、WebLogic、Tomcat、Jetty 等。一般使用 Tomcat 5.5.25 和 Jetty 作為 CXF 的運行容器,所有配置過程和發布步驟的說明也均是針對 Tomcat 和 Jetty
⑨ 如何通過HTTPS方式訪問webservice
web service在企業應用中常常被用作不同系統之間的介面方式。但是如果沒有任何安全機制的話,顯然是難以委以重任的。比較直接的web service加密方式就是使用HTTPS方式(SSL證書加密)加密連接,並且只允許持有信任證書的客戶端連接,即SSL雙向認證。這樣就保證了連接來源的可信度以及數據在傳輸過程中沒有被竊取或篡改。通過HTTPS加密方式訪問web service具體方法如下:
【准備工作】
(1)檢查JDK的環境變數是否正確。本文使用JDK 1.6
(2)准備web伺服器,這里選用TOMCAT 6.0
(3)准備web service服務端和客戶端。
【生成證書】
這里用到的文件,這里存放在D:/SSL/文件夾內,其中D:/SSL/server/內的文件是要交給伺服器用的,D:/SSL/client/內的文件是要交給客戶端用的。
1生成服務端證書
開始-運行-CMD-在dos窗口執行下執行命令:
keytool -genkey -v -aliastomcat -keyalg RSA -keystore D:/SSL/server/tomcat.keystore -dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650-storepass zljzlj -keypass zljzlj
說明:
keytool 是JDK提供的證書生成工具,所有參數的用法參見keytool –help
-genkey 創建新證書
-v 詳細信息
-alias tomcat 以」tomcat」作為該證書的別名。這里可以根據需要修改
-keyalg RSA 指定演算法
-keystoreD:/SSL/server/tomcat.keystore 保存路徑及文件名
-dname"CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" 證書發行者身份,這里的CN要與發布後的訪問域名一致。但由於這里是自簽證書,如果在瀏覽器訪問,仍然會有警告提示。真正場景中建議申請CA機構(wosign)簽發的SSL證書更安全。
-validity 3650證書有效期,單位為天
-storepass zljzlj 證書的存取密碼
-keypass zljzlj 證書的私鑰
2 生成客戶端證書
執行命令:
keytool ‐genkey ‐v ‐aliasclient ‐keyalg RSA ‐storetype PKCS12 ‐keystore D:/SSL/client/client.p12 ‐dname"CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C=CN" ‐validity 3650 ‐storepassclient ‐keypass client
說明:
參數說明同上。這里的-dname 證書發行者身份可以和前面不同,到目前為止,這2個證書可以沒有任何關系。下面要做的工作才是建立2者之間的信任關系。
3 導出客戶端證書
執行命令:
keytool ‐export ‐aliasclient ‐keystore D:/SSL/client/client.p12 ‐storetype PKCS12 ‐storepass client‐rfc ‐file D:/SSL/client/client.cer
說明:
-export 執行導出
-file 導出文件的文件路徑
4 把客戶端證書加入服務端證書信任列表
執行命令:
keytool ‐import ‐aliasclient ‐v ‐file D:/SSL/client/client.cer ‐keystoreD:/SSL/server/tomcat.keystore ‐storepass zljzl
說明:
參數說明同前。這里提供的密碼是服務端證書的存取密碼。
5 導出服務端證書
執行命令:
keytool -export -aliastomcat -keystore D:/SSL/server/tomcat.keystore -storepass zljzlj -rfc -fileD:/SSL/server/tomcat.cer
說明:
把服務端證書導出。這里提供的密碼也是服務端證書的密碼。
6 生成客戶端信任列表
執行命令:
keytool -import -fileD:/SSL/server/tomcat.cer -storepass zljzlj -keystoreD:/SSL/client/client.truststore -alias tomcat –noprompt
說明:
讓客戶端信任服務端證書
【 配置服務端為只允許HTTPS連接】
1 配置Tomcat 目錄下的/conf/server.xml
Xml代碼:
<Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"clientAuth="true"
sslProtocol="TLS"keystoreFile="D:/SSL/server/tomcat.keystore"
keystorePass="zljzlj"truststoreFile="D:/SSL/server/tomcat.keystore"
truststorePass="zljzlj" />
說明:
在server.xml裡面這段內容本來是被注釋掉的,如果想使用https的默認埠443,請修改這里的port參數。其中的clientAuth="true" 指定了雙向證書認證。
⑩ 本解決方案的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值,盡量使用字元串來替