2009-09-30 75 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(...); 
相关问题