从几个例子中我都遵循了 CalculateDetails1()使用参数'CuboidInfoRequest'声明 消息合同类型 它包含一个名为Dimension的DataContractObject作为CuboidDimension类型作为其唯一属性。
为什么调用CalculateDetails1并使用CuboidInfoRequest的参数化属性生成客户端代理 而不是消息合同对象本身?!
并且它不能再次返回由另一个datacontract组成的另一个MessageContract类型?在其中请求对象并在其中响应对象。消息合同中的DataContracts?!?
我运行了一些项目场景,如果我传递参数(MessageContract的元素,因为方法签名定义了......很好),但它是用对象(MessageContract)声明的参数类型而不是它的属性....这些out参数和ref参数来自哪里?
我当然也遵循了一些例子,如
http://codeproject.cachefly.net/Articles/664238/Understanding-Contracts-in-WCF
我尝试了什么:
Generated Client Proxy ::
public int RequestResponsePersonaCreate(int RequestId, MsgCtrtCLIENT.servREF.Persona PersonaObj, out MsgCtrtCLIENT.servREF.Persona PersonaObjResp) {
MsgCtrtCLIENT.servREF.MsgRequest inValue = new MsgCtrtCLIENT.servREF.MsgRequest();
inValue.RequestId = RequestId;
inValue.PersonaObj = PersonaObj;
MsgCtrtCLIENT.servREF.MsgResponse retVal = ((MsgCtrtCLIENT.servREF.ImsgCtrctServ)(this)).RequestResponsePersonaCreate(inValue);
PersonaObjResp = retVal.PersonaObjResp;
return retVal.ID;
}
//********implementation******
public class msgCtrctServ : ImsgCtrctServ
public MsgResponse RequestResponsePersonaCreate(MsgRequest msgReq)
{
MsgResponse msgRsp = new MsgResponse();
msgRsp.ID = 500;
msgRsp.PersonaObjResp =
new Persona
{
Category = "Dumpling",
Id = 88,
Name = "Pookie",
Toys = new List(),
Title = "Test"
};
return msgRsp;
}
//********interface******
[ServiceContract]
public interface ImsgCtrctServ
{
[OperationContract]
MsgResponse RequestResponsePersonaCreate(MsgRequest msgReq);
//*****messagecontract Response*********
[MessageContract(IsWrapped = true)]
public class MsgResponse
{
private string responseString;
private Persona _persona = new Persona();
[MessageHeader]
public int ID { get; set; }
public bool Success { get; set; }
[MessageBodyMember]
public Persona PersonaObjResp
{
get { return _persona; }
set { _persona = value; }
}
public string ResponseString
{
get { return responseString; }
set { responseString = value; }
}
//*****messagecontract Request*********
[MessageContract(IsWrapped = true)]
public class MsgRequest
{
[MessageHeader]
public int RequestId { get; set; }
[MessageBodyMember]
public Persona PersonaObj { get; set; }
//******datacontract********
public class Persona
{
public string Name { get; set; }
public int Id { get; set; }
public string Title { get; set; }
public string Category { get; set; }
答案 0 :(得分:0)
请原谅我......更多的绊脚石已经从这个StackOverflow WCF Messagecontract-clarification取得了不可思议的解决方案 并StackOverflow wcf-messagecontract-formatting-issue
显然,当生成客户端时,必须深入到可以强制客户端生成旧的ASMX样式Web服务的小区域,或强制列表是通用的而不是默认为数组,这里是魔术选项---添加服务引用中的高级配置(通过选中始终生成消息合同)..SO信用 Ladislav Mrnka回复7月4日和11日在7:08从7549953发帖谢谢先生!对于我愚蠢的重新发帖,所有人都感到抱歉 现在,有趣的部分我必须尝试!!