MOSS中自定義WebService

2021-09-05 23:35:10 字數 2997 閱讀 3250

(轉更詳細見msdn:

moss中已經提供的webservice都放在虛擬目錄_vti_bin中,對應的物理目錄為c:program filescommon filesmicrosoft sharedweb server extensions12isapi。可能你會覺得這個目錄_vti_bin名有點怪,這個名字來自該公司vermeer technologies incorporated。這個公司唯一的產品就是frontpage,該公司在2023年被微軟收購。

下面我們就自己實現乙個webservice,需要以下幾步:

一:建立webservice專案

1.使用vs2005建立乙個webserivce專案來實現我們的webservice,然後我在填加乙個類庫用於實現webservice的邏輯部分。專案結構如下圖:

為mosslibrary2類庫簽名,專案「右鍵---屬性---簽名---為程式集簽名",不使用密碼。service.cs是現實webservice邏輯的地方,**如下:

using system;

using system.web;

using system.web.services;

using system.web.services.protocols;

using microsoft.sharepoint;

using microsoft.sharepoint.utilities;

[webservice(namespace = "")]

[webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]

public class service : system.web.services.webservice

[webmethod]

public string helloworld()

[webmethod]

public string getsitelistcount()

}

二:將mosslibrary2類庫新增到gac中 (如果放在bin下就省略以下操作)

有兩種方法:

1. 將bin目錄下的mosslibrary2.dll拖到%windows%assembly資料夾下即可。

2. 開啟vs2005的命令列工具,用gacui.exe工具,命令如下:

gacutil.exe -if "".

三:修改service.asmx檔案

culture=neutral, publickeytoken=8f2dca3c0f2d0131" %>

其中的相關資訊可以到%windows%assembly資料夾下找到mosslibrary2.dll,右鍵檢視其屬性獲得,該修改主要指定service.asmx的邏輯檔案使用的是mosslibrary2專案中的service.cs中的**。

四:生成靜態發現檔案service.disco和webservice的描述檔案service.wsdl

1.將service.asmx拷貝到c:program filescommon filesmicrosoft sharedweb server extensions12templatelayouts目錄下,然後開啟vs2005的命令列工具,使用如下命令:

完成後會生成service.disco和service.wsdl檔案

2.將service.disco和service.wsdl檔案中的<?xml version="1.0" encoding="utf-8"?>該語句替換為以下語句: (這些語句在isapi目錄下的頁面也可以找到)

publickeytoken=71e9bce111e9429c" %>

實際上就是把原來的純xml變換成為乙個page來解析。並且這個頁面的解析是通過moss處理的。 

3.將service.disco中的

替換為:

docref=

response.output); %> xmlns="" />

xmlns:q1="" binding="q1:helloworld"

xmlns="" />

xmlns:q2="" binding="q2:servicesoap12"

xmlns="" />4.將service.wsdl中的

替換為:

(request)),response.output); %> />

和(request)),response.output); %> />

對於contractref 還有soap address這兩個節的更改,實際上是在頁面裡面重新編碼了soap的查詢url,這樣做的目的也

是為了moss託管的web service可以在執行時根據動態的請求來正確定位。

5.將service.disco和service.wsdl改名為servicedisco.aspx和servicewsdl.aspx

五:部署webservice

將servicedisco.aspx,servicewsdl.aspx和service.asmx三個檔案拷貝到c:program filescommon filesmicrosoft sharedweb server extensions12isapi目錄中,然後我們就可以通過以下位址來檢測我們部署是否成功了。http://carysun/_vti_bin/service.asmx.

如下圖:

六:客戶端呼叫 (在最後面我呼叫服務操作列表庫時出現乙個「請求因 http 狀態 401 失敗:unauthorized」的錯誤,那是因為iis沒啟匿名訪問)

我們建立乙個web站點,新增該webservice的應用,然後在按鈕的單擊事件新增如下**:

se.usedefaultcredentials = true;這句**是設定信任的,否則會報沒有許可權的錯誤。

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項及自定義屬性

自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...