2009-07-30 50 views
1

我已經寫了一個簡單的web服務,可以將word doc轉換爲pdf。作爲Convert方法的一部分,它需要一個自定義設置對象,其中包含有關doc路徑等的信息以及er數據的DataTable。Web服務包裝器上的公共/內部可訪問性混淆?

我現在正在創建一個「幫助器」類來使用Web服務,以便消除其他開發人員的麻煩,並且如果被告知,控制Web服務的使用者。我不希望任何人進入Web服務(甚至是開發人員)並且無所畏懼地使用它。

讓我們打電話給我的網絡服務WordToPdfWS和我的助手類WordToPdfHelper(唉); WordToPDFHelper有WordToPdfWS的Web引用,可以調用Convert(設置)方法沒有問題(它甚至可以工作!)。

當我創建消費者/測試應用程序並設置對WordToPdfHelper的引用時,我發現(如預期的)我可以創建WordToPdfHelper對象並按預期使用它。 但是,在我的消費者中,我也可以創建我的web服務(WordToPdfWS)並直接從我的消費者那裏調用它!

這絕對不是我想要的(例如任何湯姆,迪克和哈里特開發人員都可以得到它),有沒有辦法阻止它?

親切的問候,

邁克K.

+0

你可以發表一些你如何有這種結構的代碼? – 2009-07-30 16:11:50

回答

0

有趣的問題。理想的情況是您限制對lib中WS代理存根的訪問,但也可以使用自動生成的代碼。自動生成的代碼只是產生公開的輸出,並且更新該代碼文件是不可取的。

我相信你可以通過僱用techniques for code access security找到解決方案。您可以使用框架的結構來限制代碼訪問以進行交叉程序集調用。

使用映射自動生成的存根類(按名稱空間和名稱)的partial class可以實現代碼訪問安全性,無論它是在類還是方法級別。

您的存根類已經是部分類(假設它是用Visual Studio生成的)。創建一個單獨的部分類文件並使用代碼訪問安全性理論上可以提供您正在尋找的包裝器限制,並且保持與內部Web服務存根的鎖定,同時保持未來更新的方式。

我還沒有試過這個,所以你的里程可能會有所不同。

0

我在這裏的猜測是,你有聲明爲公共你的助手你的web服務實例。你會希望這是私人的或內部的。

+0

的確如此,但通過代碼查看,我可以看到更改類的可訪問性的唯一地方是自動生成的reference.cs類,所以我不願意在那裏更改它。我正在使用VS2008,並且看不到明顯的設置... – 2009-07-31 08:29:16

+0

嗯 - 編輯reference.cs類並將相關類更改爲內部中斷正在工作的內容,錯誤爲「Method WordToPdfConvertor.Convert不能爲反映「... – 2009-07-31 09:07:48