c# - 我的属性 knowntype 不支持错误操作
问题描述
我已经在 WCF 测试客户端中不支持的链接操作中阅读了此内容
我尝试运行时出错
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 正在工作。
我不知道在这个问题中添加什么。
我尝试了此链接中的所有方法。
解决方案
WCFTestclient 不支持测试所有接口方法,例如上传文件流。也不代表方法定义错误,不能调用。我建议你直接以服务引用的形式将服务添加到项目中,然后测试它是否有效。
KnownTypeAttribute 不适用于这种情况。因为您已明确指定数据协定类的属性的强类型,而不是基类型或接口。
如果有什么我可以帮忙的,请随时告诉我。
推荐阅读
- javascript - Django:在 HTML/Javascript 中索引列表时选择不同的 div
- excel - JSON 解析 - 获取股票报价
- java - 我如何使用 powermock 存根 Instant 对象
- oracle - 在 oracle 表中查找三列的斜率
- python - Python错误地写入csv文件
- sitecore - 如何将 Sitecore 项目存储桶作为路径访问?
- ios - SwiftUI 通过 TabView 模态显示视图?
- html - 如何创建带引号的多行代码段,并让它们扩展?
- r - 使用 purrr 或 igraph(或任何其他方法而不是嵌套循环)来生成有向连接的所有可能组合?
- java - "NOT IN(?)" 带参数的查询是错误的