2014-09-19 26 views
0

我的解決方案具有B2BobjectDLL,Web應用程序和工作流作爲WCF服務項目。 Workflow wcf和Web應用程序都引用了B2Bobject。所以當添加工作流WCF引用到我的web應用時,它正確地公開了GetTossCardData方法。將工作流添加爲網站的WCF服務引用。 WCF內部的業務對象也是無處不在

我用過的折騰類是B2BobjectDLL。

Toss toss = new Toss(); 
toss.GameID = 123; 
string tossCardData = string.empty; 
tossCardData = tossCardService.GetTossCardData(toss, "10"); 

的問題是GetTossCardData必須採取B2BobjectDLL類對象折騰,但該方法是告訴我們要輸入tossCardService服務的折騰對象。

對象瀏覽器窗口告訴WF WCF項目不必要地暴露與其服務對象相同的B2BobjectDLL類對象。

的錯誤消息是

Error 2 Argument 1: cannot convert from 'B2BBusinessObjects.Toss' to 'SignalRServerNew.ServiceReference2.Toss' 

如何限制公開的對象或爲什麼它被錯誤地暴露不同的類?

回答

0

當您添加服務引用時,VS會爲您運行一個名爲svcutil的工具,以使用您的「工作流」作爲服務公開的WSDL生成代理類,該服務基本上只是另一個WCF服務。

當您添加服務引用時,您可以指定您希望特定程序集中的某些類型「重用」 - 這意味着該工具不應爲這些類型生成新類,而應該在其中創建代理類這樣他們會期待那些重用的類型。

就你而言,你想告訴VS重用引用程序集B2BobjectDLL中的類型。

根據您提供的錯誤消息判斷,我可以得出結論,這種重用沒有發生,因爲您在clr namepsace SignalRServerNew.ServiceReference2中生成的代理類期望具有相同名稱空間的對象,因爲這就是它們的生成方式。

你應該做的是:

  1. 刪除當前的服務參考,並確保沒有它的蹤影被留下。

  2. 添加一個新的服務引用,並確保您指定重用組件中的類型(在Visual Studio的「添加服務引用」窗口的左下角應該有一個「高級」按鈕)

  3. (可選) - 取得在生成的文件中的實際一瞥看到自己是如何產生的代理類

希望幫助