【发布时间】:2015-01-05 20:03:46
【问题描述】:
我使用 Visual Studio 2013 进行所有开发工作。
我有一个现有的 Windows 8 应用程序,可以很好地与它的网络服务配合使用。
我正在尝试在 Xamarin Forms 中构建一个利用此现有 Web 服务的移动应用程序。当我创建对此 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);
}
【问题讨论】:
-
这可能只是一种较旧的异步方式。而不是 Task 你得到一个回调。如果您愿意,可以将其包装在 Task 中。
-
感谢您的回复,我不太清楚您的意思,您能提供一个例子吗?
-
有 EndDownloadAuditHeadersAsXmlAsync 之类的方法吗,或者 DownloadAuditHeadersRequest 有类似的方法吗?
-
为问题添加了更多信息 - 谢谢
标签: c# android ios web-services xamarin