从服务方法调用中检索返回的复杂对象的问题

时间:2009-10-02 02:20:46

标签: c# web-services

(不,这与我上一篇文章不一样,我正在尝试与var类型不同的东西)

我介绍了从Web服务引用中调用的方法。我实际上直接进入了.asmx然后回来了。它肯定会返回ServiceAuthResponse类型的有效Complext对象。这是我的.asmx方法shell(我删除了所有用于发布简单性的逻辑...只是看到它返回ServiceAuthRequest作为这里的类型):

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

我甚至可以将鼠标悬停在debitResponse var上并查看对象的属性,并且一如既往...所以对象绝对不是null ...它在我的调试过程中返回时处于状态。

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

在这里,您可以看到VS中的几个Web服务镜头:

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返回的复杂类型来获取和填充我的变量?

2 个答案:

答案 0 :(得分:0)

听起来你回来了一个空物;所以要明白我们真的需要看到这个类本身。 ASMX使用XmlSerializer来序列化公共属性和字段;只要你有类似的东西:

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

应该可以正常工作。请注意,它不会查看特定于接口的成员,只读/只写成员,内部成员等。

除了琐事之外:在同一行上声明和初始化是好的,但不会影响上面的内容(但它使得阅读起来更简单,IMO):

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

或(如果你想)在C#3.0中:

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

答案 1 :(得分:0)

该类的属性中没有任何setter。所以这就是为什么我没有得到任何州。

所以我最终创建了一个只包含属性的包装类。并使用原始类设置的属性返回该类。

上面两个都不知道,不断学习更多关于网络服务的内容......这个很令人头疼。