C# 无法将源类型转换为目标类型

C# 无法将源类型转换为目标类型,c#,C#,在我的一个测试web项目中的.aspx的代码隐藏中,我试图将此变量设置为返回的对象。我在我的web项目中获得了对web服务的引用,这很好 我正在调用我们的一个web服务方法: CompanyName.CC.DebitResponse debitRespnose = CCService.IssueDebit(...); 在.asmx中,IssuedBit返回CompanyName.CC.DebitResponse类型 但我得到了这个错误: "Cannot convert source type

在我的一个测试web项目中的.aspx的代码隐藏中,我试图将此变量设置为返回的对象。我在我的web项目中获得了对web服务的引用,这很好

我正在调用我们的一个web服务方法:

CompanyName.CC.DebitResponse debitRespnose = CCService.IssueDebit(...);
在.asmx中,IssuedBit返回CompanyName.CC.DebitResponse类型

但我得到了这个错误:

"Cannot convert source type MyWebTestProject.CCService.DebitResponse to target type CompanyName.CC.DebitResponse"
我的意思是,我正在设置的变量和我服务中的方法中定义的返回类型完全相同。那么它为什么要抱怨呢

在我的web服务中,以下是IssueDebit:

public DebitResponse IssueDebit(...)
{
...
}
我确定IssuedBit中的DebitResponse类型为CompanyName.CC.DebitResponse

更新

好吧,我被卡住了。这是实际的代码(在我为了隐私而更改名称之前)。请不要重新粘贴这些内容(或者如果您因为敏感而大幅更改名称)

这是真正的代码。查看代码背后的IssueDebit

我在测试web项目中的web服务引用名为LitleService

当我在对象资源管理器中查看该服务时,我注意到其中有冲突的类型。那么,如果我的.asax中没有定义该类,为什么该类型会出现在我的服务中呢

在我在codebehind中使用的另一种方法中,我在这里得到了参数的模糊引用:

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

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

那么,当实际ServiceAuthResponse类的源和定义位于xxx.Litle.ServiceAuthResponse…一个完全不同的项目中时,为什么我会在我的Litle服务中获得ServiceAuthResponse对象?我在两个web项目(测试项目和包含实际.asmx的web项目)中都引用了该程序集。

似乎他混淆了不同的名称空间……如果变量完全相同,那么您可以强制转换它

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

我打赌你的webservice方法,不管是有意还是无意,都返回了错误的类型

尝试将其放在webservice类的顶部:

using DebitResponse = CompanyName.CC.DebitResponse;
然后将方法调用更改为以下内容:

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

如果您发布
IssueDebit()
方法的代码,这会有所帮助。

进一步了解Bobby的回答,您尝试过这个方法吗

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

据我所知,.NET2.0WebService(asmx)会自动为调用WSDL中的方法(参数和返回类型)所需的类型生成映射

当您将webservice作为web引用添加到其他项目(本例中为您的网站)时,将自动生成代理类。在您的示例中,这些是MyWebTestProject.CCService命名空间中的名称。我不确定DebitResponse代码中到底是什么,但您的错误消息显示出了错误:

“无法将源类型MyWebTestProject.CCService.DebitResponse转换为目标类型CompanyName.CC.DebitResponse”

代理类为您调用Web服务所返回的类型不是您在Web服务中使用的CompanyName.CC.DebitResponse类型。它是从WSDL生成的类,更具体地说是:MyWebTestProject.CCService.DebitResponse。它将包含与您在Web服务中使用的类相同的所有数据,但它是一个明显不同的类。另一方面,Web服务中类上存在的方法不存在

简单地说,你必须使用:

MyWebTestProject.CCService.DebitResponse debitResponse = CCService.IssueDebit(...);

已经试过了,但没用。如果我试图设置的变量的类型与方法返回的类型相同,那么名称空间又有什么关系呢?我注意到在页面顶部不知怎么插入了该变量,我不知道如何插入:使用ServiceAuthResponse=WebServicesTesting.CCService.DebitResponse;那是什么?我没有插入此项。我无法通过内置转换来转换类型。