这很疯狂:我在VS2017中通过ServiceReference.Service1使用WCF客户端,如下所示: 网页(CSHTML5)=> SOAP-Request(WebClient)=>服务器正在调用Azure Mobile Service =>获取数据返回/写入等。
这适用于6/7方法(一些添加项目,一些获取项目)但是当我调用"删除"方法调用没有到达服务器并退出并显示错误(500)。
Java Debugger讨论" SystemArgumentException:year"
所以我在localhost上运行WCF服务进行调试,每个方法断点都可以工作,但是在任何时候我都不需要调用DeleteMethod。
这是我的操作合同:
[ServiceContract]
public interface IService1
{
[OperationContract]
List<Tour> GetTours(string _companyid);
[OperationContract]
void AddOrUpdateTour(Tour tour);
[OperationContract]
void DeleteTour(Tour tour);
[OperationContract]
bool CompanyLogin(Company company);
[OperationContract]
void AddCompany(Company company);
[OperationContract]
Company GetCompany(Company company);
[OperationContract]
void UpdateCompany(Company company);
}
我的Service1课程:
public class Service1 : IService1
{
AzureDataService azureService;
public Service1()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
azureService = new AzureDataService();
}
public List<Tour> GetTours(string _companyid)
{
var alletouren = azureService.GetAlleTouren(_companyid).Result;
return alletouren.Where(e => e.Deleted == false).ToList();
}
public async void AddOrUpdateTour(Tour tour)
{
await azureService.AddTour(tour);
}
public async void DeleteTour(Tour tour)
{
await azureService.DeleteTour(tour);
}
public bool CompanyLogin(Company company)
{
return azureService.CheckCompanyAuth(company).Result;
}
public async void AddCompany(Company company)
{
await azureService.AddCompany(company);
}
public Company GetCompany(Company company)
{
return azureService.GetCompany(company).Result;
}
public async void UpdateCompany(Company company)
{
await azureService.UpdateCompany(company);
}
}
这样我在客户端代码中使用该方法:
ServiceReference1.Service1Client soapClient = new ServiceReference1.Service1Client();
foreach (var item in SelectedDoneTourDetail)
{
soapClient.DeleteTour(item);
}
此用法直接导致异常(500)。
请有人帮忙吗?
谢谢!
修改
我已经删除了[AzureVersion]属性,但没有区别。
这是我参考WCF服务时使用的课程。我不会在客户端声明它:
[DataContract]
public class Tour
{
[JsonProperty(PropertyName = "id")]
[DataMember]
public string Id { get; set; }
[JsonProperty(PropertyName = "deleted")]
[DataMember]
public bool Deleted { get; set; }
[DataMember]
public string CompanyID { get; set; }
[DataMember]
public string TourID { get; set; }
[DataMember]
public string FahrerID { get; set; }
[DataMember]
public int Reihenfolge { get; set; }
[DataMember]
public string Bezeichnung { get; set; }
[JsonProperty(PropertyName = "Strasse")]
[DataMember]
public string Strasse { get; set; }
[DataMember]
public string Hausnummer { get; set; }
[DataMember]
public string PLZ { get; set; }
[DataMember]
public string Ort { get; set; }
[DataMember]
public string Notiz { get; set; }
[DataMember]
public string GeoPoint { get; set; }
[DataMember]
public DateTime AbfahrtZeitUser { get; set; }
[DataMember]
public string AbfahrtGeoPoint { get; set; }
[DataMember]
public DateTime AbfahrtZeitClient { get; set; }
[DataMember]
public DateTime AnkunftZeitClient { get; set; }
[DataMember]
public bool Done { get; set; }
[DataMember]
public double Distance { get; set; }
[DataMember]
public bool IsExported { get; set; }
}
修改 我没有弄清楚序列化的真正问题,并通过遵循解决方法(可能这有助于其他用户)而不知道最佳实践但现在可行的方法来跳过此问题:
我改变了我的删除&#39;删除方法(string itemid)。现在调用WCF服务并接收我的项目的ID。 Azure移动服务具有&#39; lookupasync&#39;搜索id的方法。最后,它按id删除请求的对象/记录。如果没有id,我会添加一个空检查和一个解决方法,但现在它可以工作。