C# 如何更改元素名称';ArrayForesponse';在Soap XML WCF服务中
我的问题是如何更改SOAP XML WCF服务中的ArrayOfResponse元素 正在使用消息类。。。。请参见图片“我想更改红色框中的元素…”。。。。 有什么想法吗 这是我的代码,以得到这个结果 我的界面C# 如何更改元素名称';ArrayForesponse';在Soap XML WCF服务中,c#,xml,wcf,soap,service,C#,Xml,Wcf,Soap,Service,我的问题是如何更改SOAP XML WCF服务中的ArrayOfResponse元素 正在使用消息类。。。。请参见图片“我想更改红色框中的元素…”。。。。 有什么想法吗 这是我的代码,以得到这个结果 我的界面 [ServiceContract()] public interface IEvaluationWebService { [OperationContract(ReplyAction = "Evaluations")] Message Ge
[ServiceContract()]
public interface IEvaluationWebService
{
[OperationContract(ReplyAction = "Evaluations")]
Message GetEvaluations(EvaluationRequest evaluationRequest);
}
此方法指定一个参数EvaluationRequest类来返回消息(评估类列表)
请求类(GetEvaluations方法的参数)
评价班
Message IEvaluationWebService.GetEvaluations(EvaluationRequest evaluationRequest)
{
SqlConnection cnn = new SqlConnection("");
DateTime dtstart = new DateTime();
DateTime.TryParseExact(evaluationRequest.PeriodStart, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dtstart);
evaluationRequest.PeriodStart = dtstart.ToString("yyyy-MM-dd");
DateTime dtend = new DateTime();
DateTime.TryParseExact(evaluationRequest.PeriodEnd, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out dtend);
evaluationRequest.PeriodEnd = dtend.ToString("yyyy-MM-dd");
SqlCommand cmd = new SqlCommand("GetEmployeeEvaluation", cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@PeriodStart", SqlDbType.VarChar, 10).Value = evaluationRequest.PeriodStart;
cmd.Parameters.Add("@PeriodEnd", SqlDbType.VarChar, 10).Value = evaluationRequest.PeriodEnd;
cnn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
List<Evaluation> evaluationList = new List<Evaluation>();
MessageVersion ver = OperationContext.Current.IncomingMessageVersion;
while (sdr.Read())
{
Evaluation evaluation = new Evaluation();
evaluation.EstLaborOfficeId = Convert.ToInt32(sdr["EstLaborOfficeId"].ToString());
evaluation.EstSequenceNumber = Convert.ToInt32(sdr["EstSequenceNumber"].ToString());
evaluation.IdNumber =
evaluationList.Add(evaluation);
}
Evaluation eval = new Evaluation();
cnn.Close();
return Message.CreateMessage(ver, "Evaluations", evaluationList);
}
[DataContract()]
public class Evaluation
{
private int _EstLaborOfficeId;
private int _EstSequenceNumber;
private long _IdNumber;
[DataMember]
public int EstLaborOfficeId
{
get { return _EstLaborOfficeId; }
set { _EstLaborOfficeId = value; }
}
[DataMember(Order = 2)]
public int EstSequenceNumber
{
get { return _EstSequenceNumber; }
set { _EstSequenceNumber = value; }
}
}
任何想使用你的服务的人都不知道他会得到什么样的结果。它只是“消息”,没有特定的消息契约 据我所知,从这里,你想返回一份评估清单 您可以尝试的是:(未经测试)
[MessageContract]
公共课评价
{
私人办公室;
私人整数;
私人长途电话号码;
[MessageBodyMember]
公共办公室ID
{
获取{return}
设置{estlaboraoficeid=value;}
}
[MessageBodyMember]
公共整数序列号
{
获取{return}EstSequenceNumber;}
设置{EstSequenceNumber=value;}
}
}
[信息合同]
公共类评估列表
{
[MessageBodyMember]
公共列表值{get;set}
}
[ServiceContract()]
公共接口IEvaluationWebService
{
[经营合同]
EvaluationList GetEvaluations(EvaluationRequest EvaluationRequest);
}
…或者尝试使用列表作为返回并忘记EvaluationList
[ServiceContract()]
public interface IEvaluationWebService
{
[OperationContract]
List<Evaluation> GetEvaluations(EvaluationRequest evaluationRequest);
}
[ServiceContract()]
公共接口IEvaluationWebService
{
[经营合同]
列出GetEvaluations(EvaluationRequest EvaluationRequest);
}
现在,EvaluationList和EvaluationRequest都是MessageContracts
请记住,如果您想要完全控制SOAP消息,您只想使用MessageContract。这里的情况似乎并非如此。
因此,更简单的方法是将EvaluationRequest更改回DataContract:
[DataContract()]
public class Evaluation
{
private int _EstLaborOfficeId;
private int _EstSequenceNumber;
private long _IdNumber;
[DataMember]
public int EstLaborOfficeId
{
get { return _EstLaborOfficeId; }
set { _EstLaborOfficeId = value; }
}
[DataMember(Order = 2)]
public int EstSequenceNumber
{
get { return _EstSequenceNumber; }
set { _EstSequenceNumber = value; }
}
}
[DataContract]
public class EvaluationRequest
{
[DataMember]
public string PeriodStart { get; set; }
[DataMember]
public string PeriodEnd { get; set; }
}
[ServiceContract()]
public interface IEvaluationWebService
{
[OperationContract]
List<Evaluation> GetEvaluations(EvaluationRequest evaluationRequest);
}
[DataContract()]
公共课评价
{
私人办公室;
私人整数;
私人长途电话号码;
[数据成员]
公共办公室ID
{
获取{return}
设置{estlaboraoficeid=value;}
}
[数据成员(顺序=2)]
公共整数序列号
{
获取{return}EstSequenceNumber;}
设置{EstSequenceNumber=value;}
}
}
[数据合同]
公共类评估请求
{
[数据成员]
公共字符串PeriodStart{get;set;}
[数据成员]
公共字符串PeriodEnd{get;set;}
}
[ServiceContract()]
公共接口IEvaluationWebService
{
[经营合同]
列出GetEvaluations(EvaluationRequest EvaluationRequest);
}
黄金法则是:尽量不要在服务操作中混合使用DataContract和MessageContract,因为WCF会将其视为安全缺陷
因此,将两个类、result和参数定义为DataContract或MessageContract,但不要混淆它们
[MessageContract]
public class Evaluation
{
private int _EstLaborOfficeId;
private int _EstSequenceNumber;
private long _IdNumber;
[MessageBodyMember]
public int EstLaborOfficeId
{
get { return _EstLaborOfficeId; }
set { _EstLaborOfficeId = value; }
}
[MessageBodyMember]
public int EstSequenceNumber
{
get { return _EstSequenceNumber; }
set { _EstSequenceNumber = value; }
}
}
[MessageContract]
public class EvaluationList
{
[MessageBodyMember]
public List<Evaluation> Values {get;set}
}
[ServiceContract()]
public interface IEvaluationWebService
{
[OperationContract]
EvaluationList GetEvaluations(EvaluationRequest evaluationRequest);
}
[ServiceContract()]
public interface IEvaluationWebService
{
[OperationContract]
List<Evaluation> GetEvaluations(EvaluationRequest evaluationRequest);
}
[DataContract()]
public class Evaluation
{
private int _EstLaborOfficeId;
private int _EstSequenceNumber;
private long _IdNumber;
[DataMember]
public int EstLaborOfficeId
{
get { return _EstLaborOfficeId; }
set { _EstLaborOfficeId = value; }
}
[DataMember(Order = 2)]
public int EstSequenceNumber
{
get { return _EstSequenceNumber; }
set { _EstSequenceNumber = value; }
}
}
[DataContract]
public class EvaluationRequest
{
[DataMember]
public string PeriodStart { get; set; }
[DataMember]
public string PeriodEnd { get; set; }
}
[ServiceContract()]
public interface IEvaluationWebService
{
[OperationContract]
List<Evaluation> GetEvaluations(EvaluationRequest evaluationRequest);
}