【问题标题】:How do I invoke a WCF operationcontract using a messagecontract?如何使用 messagecontract 调用 WCF operationcontract?
【发布时间】: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


    【解决方案1】:

    请原谅我......更多的绊脚石已经从这个StackOverflow WCF Messagecontract-clarification中解开了神奇的解决方案 还有StackOverflow wcf-messagecontract-formatting-issue

    显然,在生成客户端时,必须深入研究可以强制客户端生成旧的 ASMX 样式 Web 服务或强制列表为通用而不是默认为数组的小区域,这就是神奇的选择 --- - 添加服务参考中的高级配置(通过检查始终生成消息合同)..SO 归功于 Ladislav Mrnka 于 2011 年 7 月 4 日 7:08 从 7549953 帖子回答了谢谢先生!并对我愚蠢的重新发布感到抱歉..
    现在有趣的部分我必须尝试一下!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多