Я использую Visual Studio 2013 для работы всех разработчиков.Xamarin Forms, не создающие ожидаемые типы возвращаемых данных из Webservice
У меня есть существующее приложение Windows 8, которое отлично работает с его веб-сервисом.
Я пытаюсь создать мобильное приложение в Xamarin Forms, которое использует этот существующий веб-сервис. Когда я создаю ссылку на службу для этого веб-сервиса, я не получаю никаких ошибок и ссылка создается. Однако функции, созданные в моем новом приложении 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);
}
Как вы можете видеть, возвращаемый тип совершенно другой, она была изменена к мочеиспусканию, поэтому очевидно, что я не могу использовать это как Я ожидал.
Есть ли что-то, что я делаю неправильно, когда создаю ссылку на службу в Xamarin Forms (или PCL). В качестве теста я удалил ссылку из существующего проекта и повторно добавил его, и он создается, как и ожидалось. У меня есть только эта проблема в моем проекте Xamarin.
Могу ли я сделать это в форматах Xamarin с помощью PCL или мне нужно использовать общий проект? Или Хасарин не допустит этого вообще?
Редактировать - Дополнительная информация: Как указано, новая автоматически сгенерированная функция не возвращает требуемый тип. Эти функции существуют, которые, кажется, возвращают то, что мне нужно, но я не уверен, как их использовать, может ли кто-нибудь пролить свет?
[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);
}
Это, вероятно, более старый способ сделать асинхронный. Вместо задачи вы получаете обратный вызов. Что вы можете обернуть в Задаче, если хотите. –
Спасибо за ваш ответ, я не совсем уверен, что вы имеете в виду, не могли бы вы представить пример, пожалуйста? – Rick
Существуют ли методы, подобные EndDownloadAuditHeadersAsXmlAsync, или у DownloadAuditHeadersRequest есть что-то в этом роде? –