2009-09-30 119 views
2

在我的一個測試Web項目中的.aspx的代碼隱藏中,我試圖將此變量設置爲返回的對象。我已經在我的Web項目中引用了Web服務,這很好。無法將源類型轉換爲目標類型

我正在打電話給我們的Web服務方法之一:

CompanyName.CC.DebitResponse debitRespnose = CCService.IssueDebit(...); 
中的.asmx IssueDebit回報

鍵入CompanyName.CC.DebitResponse。

但我得到這個錯誤:

"Cannot convert source type MyWebTestProject.CCService.DebitResponse to target type CompanyName.CC.DebitResponse" 

我的意思是我設置的變量,在我服務的方法定義的返回類型是完全一樣的。那爲什麼會抱怨呢?

在我的web服務,這裏的IssueDebit:

public DebitResponse IssueDebit(...) 
{ 
... 
} 

我知道肯定DebitResponse在IssueDebit的類型是CompanyName.CC.DebitResponse

更新。

好的,我很困難。這是實際的代碼(在我爲了隱私目的而更改名稱之前)。請不要再貼上任何這(或者如果你徹底改變名稱,因爲這是敏感的)

http://www.elbalazo.net/post/codebehind.txthttp://www.elbalazo.net/post/webservice.txt

這纔是真正的代碼。在後面的代碼中查看IssueDebit。

我在測試Web項目中的Web服務參考名爲LitleService。

當我在對象資源管理器中查看該服務時,我注意到它具有相互衝突的類型。那麼爲什麼這種類型會在我的服務中,如果我沒有在我的.asax中定義這個類?

http://www.elbalazo.net/post/webservice_objectexplorer.jpg

在另一種方法我在我的代碼隱藏掐滅,我在帕拉姆越來越曖昧參考這裏:

private void SetIssueDebitResults(ServiceAuthResponse response) 
    { 
     //not implemented 
    } 

Ambiguous Reference: 
xxx.Litle.ServiceAuthResponse 
WebServiceTesting.LitleService.ServiceAuthResponse 

那麼,爲什麼我得到ServiceAuthResponse OBJET在我這樣的痘痘服務當實際的ServiceAuthResponse類的來源和定義是在xxx.Litle.ServiceAuthResponse ...一個完全不同的項目?我已經在這兩個Web項目中引用了該程序集(測試項目和包含實際.asmx的我的Web項目)。

回答

1

我打賭你的webservice方法是有意或無意返回錯誤的類型。

嘗試把這個在您的Web服務類的頂部:

using DebitResponse = CompanyName.CC.DebitResponse; 

,然後改變你的方法調用是這樣的:

public DebitResponse IssueDebit(variable) 
{ 
    // stuff... 
} 

如果您發佈的IssueDebit()方法的代碼它會幫幫我。

+1

我注意到我的頁面頂部有點插入,我不知道如何:使用ServiceAuthResponse = WebServicesTesting.CCService.DebitResponse;那是什麼?我沒有插入這個。 – PositiveGuy 2009-09-30 16:16:07

0

好像他混淆了不同的命名空間......如果變量完全是ident,那麼你可以施放它。

CompanyName.CC.DebitResponse debitRespnose = (CompanyName.CC.DebitResponse)CCService.IssueDebit(...); 
+0

試過了,不過它沒有工作。爲什麼命名空間很重要,如果我試圖設置的變量與方法返回的類型相同? – PositiveGuy 2009-09-30 16:07:25

0

進一步沿鮑比的迴應,你有沒有嘗試過?

CompanyName.CC.DebitResponse debitResponse = 
    CCService.IssueDebit(...) as CompanyName.CC.DebitResponse; 
+0

是的,沒有工作。 – PositiveGuy 2009-09-30 17:26:06

+0

我不能通過內置轉換轉換類型。 – PositiveGuy 2009-09-30 17:27:04

0

據我所知,.NET 2.0 web服務(ASMX)自動生成用於調用方法(參數和返回類型)在WSDL所需的類型的映射。

當您將webservice添加爲您的其他項目(本例中爲您的網站)的Web引用時,會自動生成代理類。這些是MyWebTestProject.CCService命名空間中的,在你的情況。我不知道究竟是什麼在你的DebitResponse代碼,但您的錯誤消息顯示什麼是錯的:

「無法轉換源類型MyWebTestProject.CCService.DebitResponse到目標類型CompanyName.CC.DebitResponse」

類型由代理類返回,它爲您調用web服務不是類型CompanyName.CC.DebitResponse,您在您的web服務中使用。它是從WSDL生成的類,更具體地說是:MyWebTestProject.CCService.DebitResponse。它將包含與您在web服務中使用的類相同的所有數據,但它是一個截然不同的類。另一方面,web服務中類中存在的方法不存在。

所以,簡單地說:你必須使用:

MyWebTestProject.CCService.DebitResponse debitResponse = CCService.IssueDebit(...); 
相關問題