如何使用messagecontract调用WCF operationcontract?

时间:2016-08-31 15:36:06

标签: wcf

从几个例子中我都遵循了 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; }

1 个答案:

答案 0 :(得分:0)

请原谅我......更多的绊脚石已经从这个StackOverflow WCF Messagecontract-clarification取得了不可思议的解决方案 并StackOverflow wcf-messagecontract-formatting-issue

显然,当生成客户端时,必须深入到可以强制客户端生成旧的ASMX样式Web服务的小区域,或强制列表是通用的而不是默认为数组,这里是魔术选项---添加服务引用中的高级配置(通过选中始终生成消息合同)..SO信用 Ladislav Mrnka回复7月4日和11日在7:08从7549953发帖谢谢先生!对于我愚蠢的重新发帖,所有人都感到抱歉 现在,有趣的部分我必须尝试!!