(不,这与我上一篇文章不一样,我正在尝试与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返回的复杂类型来获取和填充我的变量?
答案 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。所以这就是为什么我没有得到任何州。
所以我最终创建了一个只包含属性的包装类。并使用原始类设置的属性返回该类。
上面两个都不知道,不断学习更多关于网络服务的内容......这个很令人头疼。