【发布时间】:2019-08-17 18:28:34
【问题描述】:
我已经在链接Operation not supported in the WCF Test Client中读到了这篇文章
我尝试运行时出错
WCF GetBatch() 不支持该操作
这是我的课程如何解决这个问题
[KnownType(typeof(Contract))]
[KnownType(typeof(TotalAmount))]
[KnownType(typeof(SubjectRole))]
[KnownType(typeof(ContractData))]
[KnownType(typeof(MonthlyPayment))]
[KnownType(typeof(ProlongationAmount))]
[DataContract]
public class Batch
{
private string batchIdentifierField;
private Contract contractField;
[DataMember]
public string BatchIdentifier
{
get { return this.batchIdentifierField;}
set { this.batchIdentifierField = value;}
}
[DataMember]
public Contract Contract
{
get { return this.contractField;}
set { this.contractField = value;}
}
}
[DataContract(Name = "Contract")]
public partial class Contract
{
\\\other fields
[DataMember]
public ContractData ContractData{get;set;}
[DataMember]
public SubjectRole[] SubjectRole{get;set;}
\\\other fields
}
[DataContract(Name = "ContractData")]
public partial class ContractData
{
\\\other fields
[DataMember]
public TotalAmount TotalAmount{get;set;}
[DataMember]
public MonthlyPayment TotalMonthlyPayment{get;set;}
[DataMember]
public ProlongationAmount ProlongationAmount{get;set;}
\\\other fields
}
[DataContract(Name = "TotalAmount")]
public partial class TotalAmount{}
[DataContract(Name = "MonthlyPayment")]
public partial class MonthlyPayment{}
[DataContract(Name = "ProlongationAmount")]
public partial class ProlongationAmount{}
界面
[ServiceContract]
public interface IBankService
{
[OperationContract]
Batch GetBatch(string DateTime);
[OperationContract]
string AddBatch(Batch entityBatch);
[OperationContract]
string AddLocalBatch(string localPath);
[OperationContract]
string Ping();
}
这是有效的方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using ModelContract;
using DABatch;
namespace WCF_Service
{
// Realization my Methods
public class BankService : IBankService
{
public Batch GetBatch(string datetime)
{
try
{
DateTime date = DateTime.Parse(datetime);
if (datetime.IsEmpty())
{
Debug.WriteLog("Field Datetime is Empty");
return new Batch();
}
using (BatchContext db = new BatchContext())
{
if (db.DBBatches.Any(x => x.Contract.ContractData.StartDate.Equals(date)))
{
//.......
return ChangedBatch;
}
else
{
//Just insert Time and create new object
//......
return newBatch;
}
}
}
catch(Exception ex)
{
Debug.WriteLog(ex.Message);
return new Batch();
}
}
public string AddBatch(Batch entityBatch)
{
try
{
if (entityBatch == null)
{
Debug.WriteLog("Batch entity is Empty", new NullReferenceException());
return "Error : Batch entity is Empty, nothing to Load";
}
using (BatchContext db = new BatchContext())
{
db.DBBatches.Add(entityBatch);
return "Add Operation Success!";
}
}
catch(Exception ex)
{
Debug.WriteLog(ex.Message);
return string.Format($"Error : {ex.Message}");
}
}
public string AddLocalBatch(string localPath)
{
try
{
if (localPath.IsEmpty())
{
Debug.WriteLog("Link is Empty");
return "Error : Link is Empty, nothing to Load";
}
var entityBatch = XmlReader.Read(localPath);
using (BatchContext db = new BatchContext())
{
db.DBBatches.Add(entityBatch);
return "Add Operation Success!";
}
}
catch (Exception ex)
{
Debug.WriteLog(ex.Message);
return string.Format($"Error : {ex.Message}");
}
}
public string Ping()
{
return string.Format($"Service is working. OK! Date : {DateTime.Now.ToLongDateString()} Time: {DateTime.Now.ToLongTimeString()}");
}
}
AddLocalBatch 正在运行。
我不知道要在这个问题中添加什么。
我尝试了this link中的所有方法。
【问题讨论】:
-
GetBatch可能没有OperationaContract属性。查看示例用法here。 -
对不起,我没有显示我的界面,是的,有一个 OperationContract 和 ServiceContract
-
请显示所有相关代码,并保留minimal reproducible example
标签: c# wcf c#-4.0 soap attributes