【发布时间】:2016-08-31 15:36:06
【问题描述】:
从我遵循的几个示例中
使用参数“CuboidInfoRequest”声明 CalculateDetails1()
消息合约类型
其中包含一个名为 Dimension 的 DataContractObject,类型为 CuboidDimension 作为其唯一属性。
为什么调用 CalculateDetails1 并使用 CuboidInfoRequest 的参数化属性生成客户端代理 而不是消息合约对象本身?!
它不能再次返回另一个由另一个数据合同组成的 MessageContract 类型吗?带有对象的请求和带有对象的响应。消息合同中的数据合同?!?
我已经运行了一些项目场景,如果我传递了参数(方法签名定义的 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; }
【问题讨论】:
标签: wcf