Xamarin Forms没有从Web服务创建预期的返回类型
本文关键字:创建 返回类型 服务 Web Forms Xamarin | 更新日期: 2023-09-27 18:25:23
所有开发工作都使用Visual Studio 2013。
我有一个现有的windows8应用程序,可以很好地与它的web服务配合使用。
我正在尝试用Xamarin Forms构建一个利用现有网络服务的移动应用程序。当我创建此Web服务的服务引用时,我没有收到任何错误,并且引用已创建。然而,在我的新Xamarin Forms应用程序中创建的功能并不总是复制现有应用程序中的功能。例如
现有应用程序:
public System.Threading.Tasks.Task<CompassESafe.eAuditService.DownloadAuditHeadersResponse> DownloadAuditHeadersAsXmlAsync(CompassESafe.eAuditService.DownloadAuditHeadersRequest request) {
return base.Channel.DownloadAuditHeadersAsXmlAsync(request);
}
Xamarin表格:
public void DownloadAuditHeadersAsXmlAsync(eAudit.eAuditService.DownloadAuditHeadersRequest request) {
this.DownloadAuditHeadersAsXmlAsync(request, null);
}
正如你所看到的,返回类型完全不同,它已经被更改为void,所以很明显我不能像预期的那样使用它
当我在Xamarin Forms(或PCL)中创建服务引用时,我是否做错了什么。作为一个测试,我从现有项目中删除了引用并重新添加了它,它就按预期创建了。我只在我的Xamarin项目中遇到了这个问题。
我可以使用PCL在Xamarin Forms中执行此操作吗?还是需要使用共享项目?或者Xamarin根本不允许这样做?
编辑-更多信息:如前所述,新的自动生成函数不会返回所需的类型。这些函数的存在似乎会返回我需要的东西,但我不知道如何使用它们,有人能透露一些信息吗?
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
eAudit.eAuditService.DownloadAuditHeadersResponse eAudit.eAuditService.IDeviceService.EndDownloadAuditHeadersAsXml(System.IAsyncResult result) {
return base.Channel.EndDownloadAuditHeadersAsXml(result);
}
private System.IAsyncResult OnBeginDownloadAuditHeadersAsXml(object[] inValues, System.AsyncCallback callback, object asyncState) {
eAudit.eAuditService.DownloadAuditHeadersRequest request = ((eAudit.eAuditService.DownloadAuditHeadersRequest)(inValues[0]));
return ((eAudit.eAuditService.IDeviceService)(this)).BeginDownloadAuditHeadersAsXml(request, callback, asyncState);
}
private object[] OnEndDownloadAuditHeadersAsXml(System.IAsyncResult result) {
eAudit.eAuditService.DownloadAuditHeadersResponse retVal = ((eAudit.eAuditService.IDeviceService)(this)).EndDownloadAuditHeadersAsXml(result);
return new object[] {
retVal};
}
private void OnDownloadAuditHeadersAsXmlCompleted(object state) {
if ((this.DownloadAuditHeadersAsXmlCompleted != null)) {
InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
this.DownloadAuditHeadersAsXmlCompleted(this, new DownloadAuditHeadersAsXmlCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
}
}
public void DownloadAuditHeadersAsXmlAsync(eAudit.eAuditService.DownloadAuditHeadersRequest request) {
this.DownloadAuditHeadersAsXmlAsync(request, null);
}
public void DownloadAuditHeadersAsXmlAsync(eAudit.eAuditService.DownloadAuditHeadersRequest request, object userState) {
if ((this.onBeginDownloadAuditHeadersAsXmlDelegate == null)) {
this.onBeginDownloadAuditHeadersAsXmlDelegate = new BeginOperationDelegate(this.OnBeginDownloadAuditHeadersAsXml);
}
if ((this.onEndDownloadAuditHeadersAsXmlDelegate == null)) {
this.onEndDownloadAuditHeadersAsXmlDelegate = new EndOperationDelegate(this.OnEndDownloadAuditHeadersAsXml);
}
if ((this.onDownloadAuditHeadersAsXmlCompletedDelegate == null)) {
this.onDownloadAuditHeadersAsXmlCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDownloadAuditHeadersAsXmlCompleted);
}
base.InvokeAsync(this.onBeginDownloadAuditHeadersAsXmlDelegate, new object[] {
request}, this.onEndDownloadAuditHeadersAsXmlDelegate, this.onDownloadAuditHeadersAsXmlCompletedDelegate, userState);
}
好吧,所以在尝试了很多随机的东西来使用从Web服务生成的新代码之后,答案似乎很简单——我以前从未使用过委托,所以这对我来说是一件新鲜事。
service.DownloadAuditHeadersResponse headersResponse = null;
_serviceClient.DownloadAuditHeadersAsXmlCompleted += delegate(object o, eServ.service.DownloadAuditHeadersAsXmlCompletedEventArgs args)
{
headersResponse = args.Result;
};
因此,您没有直接调用函数来返回所需的对象,而是订阅了返回对象的DownloadXxxCompleted事件。