2009-10-02 41 views
2

(不,这是不一样的我的最后一个职位,我想不同的东西在这里,如VAR型)问题,从服务方式获取返回的复杂对象调用

我通过我从调用的方法踩我Web服务参考。我直接进入.asmx和后面。它肯定会返回ServiceAuthResponse类型的有效Complext对象。这里是我的.asmx方法壳(我已经删除了所有逻辑张贴简单...只是看到它返回ServiceAuthRequest作为类型这里):

public ServiceAuthResponse IssueDebit(...) 
{ 
    .... 
    return debitResponse; 
} 

我甚至可以将鼠标放在debitResponse var和看对象的属性和所有的一样总是......所以对象绝对不是空的......它在我的调试过程中被返回时有状态。

我在引用/使用此Web服务的另一个Web项目中.aspx页面的代码隐藏中调用此服务方法。

在这里,您可以看到Web服务的两杆在VS:

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

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

所以我在我的方法之一,代码隐藏我打电话和抢返回对象。在我的代码顶端,我有这个using语句来指定ServiceAuthResponse应该来自代理类(否则它会与我已经添加到此Web项目中的其他一些引用相冲突):

using ServiceAuthResponse = WebServicesTesting.LitleService.ServiceAuthResponse; 

不存在这个问题。我不知道该IssueDebit返回的成功返回对象有多相当。调用IssueDebit的工作原理和当我移过调试点设置为debitResponse = litleService.IssueDebit(...);并尝试查看debitResponse,我什么也没有得到。我看不到任何东西。

我看到的全部是这样的:http://www.elbalazo.net/post/objectempty.jpg这意味着变量debitResponse应该有效,但是当我将鼠标移到上面时,我只能得到命名空间。

这里再次代码调用IssueDebit Web服务方法:

private void IssueDebit() 
{ 
    ValidateFormData(); 
    SetState(); 

    if (string.IsNullOrEmpty(txtDebitAmount.Text)) 
     throw new NullReferenceException("Debit amount is empty"); 

    ServiceAuthResponse debitResponse; 

    debitResponse = litleService.IssueDebit(...); 

    pnlIssueDebitResults.Visible = true; 

    SetIssueDebitResults(debitResponse); 

} 

我做得不对的背景如何,我应该试图抓住和填充我变量与复杂类型背回窜Web服务方法调用IssueDebit?

+0

回复评论 – 2009-10-02 15:30:22

回答

0

这听起来像你回来了一个空的物体;所以要了解我们真的需要看课程本身。 ASMX使用XmlSerializer,它序列化公共属性和字段;所以只要你有这样的东西:

public class ServiceAuthResponse() { 
    public int ID {get;set;} 
    public string Name {get;set;} 
} 

它应该工作正常。请注意,它没有看特定接口的成员,只读/只写成员,内部成员等。

一般情况下:可以在同一行声明和初始化,但是这个“T影响以上(但它可以更容易阅读,IMO):

ServiceAuthResponse debitResponse = litleService.IssueDebit(...); 

或者(如果你想在c)3#。0:

var debitResponse = litleService.IssueDebit(...); 
+0

我知道该方法绝对不会返回一个空对象,所以为什么我会在设置该var时得到这个? – PositiveGuy 2009-10-02 13:05:00

+0

该类是否需要标记为可序列化? – PositiveGuy 2009-10-02 13:06:00

+0

您可以看到,当我调试我的.asmx中的web方法时,IssueDebit返回了一个有效的对象:http://www.elbalazo.net/post/returnobject.jpg – PositiveGuy 2009-10-02 13:10:13

0

这个类在其属性中没有任何setter。所以这就是为什么我没有得到任何国家。

所以我最终创建了一个只有属性的包装类。然后用那些原始类设置的属性返回这个类。

不知道以上两点,不断了解更多关于Web服务的知识......这一个令人头疼。

+0

确保(礼貌地)告诉你的老板,他让你学习旧技术,而你的公司的竞争对手更可能是最新的。 – 2009-10-05 01:40:56

相关问题