Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Web服务返回时丢失数据_C#_Wcf_Web Services_Asmx - Fatal编程技术网

C#Web服务返回时丢失数据

C#Web服务返回时丢失数据,c#,wcf,web-services,asmx,C#,Wcf,Web Services,Asmx,我正在编写一个调用webmethod的客户端程序,但是当我得到返回数据时,某些字段和对象上缺少值 webmethod依次调用一个方法,而在WCF方法中,返回的数据很好。但是当它传递到webservice时,返回数据丢失 有没有办法解决这个问题 这是我调用Web服务的客户端代码: ReLocationDoc query = new ReLocationDoc(); query.PerformerSiteId = 1; query.PerformerUserId = 1;

我正在编写一个调用webmethod的客户端程序,但是当我得到返回数据时,某些字段和对象上缺少值

webmethod依次调用一个方法,而在WCF方法中,返回的数据很好。但是当它传递到webservice时,返回数据丢失

有没有办法解决这个问题


这是我调用Web服务的客户端代码:

    ReLocationDoc query = new ReLocationDoc();

    query.PerformerSiteId = 1;
    query.PerformerUserId = 1;
    query.FromStatus = 10;
    query.ToStatus = 200;

    ReLocationDoc doc = new ReLocationDoc();

    ServiceReference1.QPSoapClient service = new QPSoapClient();
    try {
        service.GetRelocationAssignment(query, out doc);

        string test = doc.Assignment.Id.ToString();

    } catch(Exception ex) {

        MessageBox.Show(ex.Message);
    }
webmethod代码如下所示:

        [WebMethod]
        return m_reLocationClient.GetRelocationAssignment(query, out reLocationDoc);
    }
最后是WCF代码:

    public ReLocationResult GetRelocationAssignment(ReLocationDoc query, out ReLocationDoc reLocationDoc) {
        try {
            LOGGER.Trace("Enter GetRelocationAssignment().");

            ReLocationResult result = reLocationCompactServiceClient.GetRelocationAssignment(out reLocationDoc, query);

            if(reLocationDoc.Assignment == null || reLocationDoc.Assignment.CurrentStatus == STATUS_FINISHED) {
                ReLocationDoc newQuery = new ReLocationDoc();
                newQuery.Assignment = new AssignmentDoc();
                newQuery.Assignment.EAN = DateTime.Today.ToString();
                newQuery.PerformerSiteId = QPSITE;
                newQuery.PerformerUserId = QPUSER;
                reLocationDoc.AssignmentStatus = m_settings.ReadyStatus; ;
                result = reLocationCompactServiceClient.CreateReLocationAssignment(out reLocationDoc, newQuery);
            }

            return result;

        } finally {
            LOGGER.Trace("Exit GetRelocationAssignment().");
        }
    }
GetRelocationAssignment:

    public ReLocationResult GetRelocationAssignment(ReLocationDoc query, out ReLocationDoc reLocationDoc) {
        try {
            LOGGER.Trace("Enter GetRelocationAssignment().");

            ReLocationDoc doc = new ReLocationDoc();
            ReLocationResult result = new ReLocationResult();

            new Database(Connection).Execute(delegate(DBDataContext db) {

                User user = GetVerifiedUser(db, query, MODULE_ID);
                SiteModule siteModule = SiteModule.Get(db, query.PerformerSiteId, MODULE_ID);

                Status status = Status.Get(db, query.FromStatus, query.ToStatus, 0);
                Status startStatus = Status.Get(db, query.FromStatus, 0);
                Status endStatus = Status.Get(db, query.ToStatus, 0);

                IQueryable<Assignment> assignments = Assignment.GetAssignmentsWithEndStatus(db, siteModule, endStatus);
                assignments = Assignment.FilterAssignmentStartStatus(assignments, startStatus);

                foreach(Assignment assignment in assignments) {

                    LOGGER.Debug("Handling assignment: " + assignment.Id);

                    result.Status = true;
                    AssignmentDoc assignmentDoc = FillAssignmentDoc(assignment);
                    //ReLocationDoc doc = new ReLocationDoc();

                    AssignmentStatus sts = assignment.AssignmentStatus.OrderByDescending(ass => ass.Id).First();
                    assignmentDoc.CurrentStatus = sts.Status.Zone;

                    Status currentStatus = sts.Status;

                    IList<Item> items = assignment.Items.ToList();
                    IList<ItemDoc> itemDocs = new List<ItemDoc>();
                    foreach(Item item in items) {

                        ItemDoc itemDoc = FillItemDoc(item);

                        ItemDetail itemDetail;
                        if(ItemDetail.TryGet(db, item.Id, out itemDetail)) {
                            ItemDetailDoc itemDetailDoc = FillItemDetailDoc(itemDetail);
                            itemDoc.Details = new ItemDetailDoc[1];


                            Event eEvent = null;
                            if(Event.GetEvent(db, itemDetail, currentStatus, out eEvent)) {
                                EventDoc eventDoc = FillEventDoc(eEvent);
                                itemDetailDoc.Events = new EventDoc[1];

                                if(eEvent.LocationId.HasValue) {
                                    Location location = null;
                                    if(Location.TryGet(db, eEvent.LocationId.Value, out location)) {
                                        eventDoc.Location = new LocationDoc();
                                        eventDoc.Location = FillLocationDoc(location, db);
                                    }
                                }
                                itemDetailDoc.Events[0] = eventDoc;
                            }
                            itemDoc.Details[0] = itemDetailDoc;
                        }
                        itemDocs.Add(itemDoc);
                    }
                    assignmentDoc.Items = itemDocs.ToArray();
                    doc.Assignment = assignmentDoc;
                }

            }, delegate(Exception e) {
                result.Message = e.Message;
            });

            reLocationDoc = doc;
            return result;

        } finally {
            LOGGER.Trace("Exit GetRelocationAssignment().");
        }
    }
public ReLocationResult GetRelocationAssignment(ReLocationDoc查询,out ReLocationDoc ReLocationDoc){
试一试{
Trace(“输入GetRelocationAssignment()”;
ReLocationDoc doc=新的ReLocationDoc();
ReLocationResult=新的ReLocationResult();
新建数据库(连接).执行(委托(DBDataContext数据库){
User User=GetVerifiedUser(数据库、查询、模块标识);
SiteModule SiteModule=SiteModule.Get(db,query.PerformerSiteId,MODULE\u ID);
Status Status=Status.Get(db,query.FromStatus,query.ToStatus,0);
Status startStatus=Status.Get(db,query.FromStatus,0);
Status endStatus=Status.Get(db,query.ToStatus,0);
IQueryable assignments=Assignment.GetAssignmentsWithEndStatus(db、siteModule、endStatus);
assignments=Assignment.FilterAssignmentStartStatus(assignments,startStatus);
foreach(作业中的作业){
调试(“处理分配:”+assignment.Id);
结果。状态=真;
AssignmentDoc AssignmentDoc=FillAssignmentDoc(分配);
//ReLocationDoc doc=新的ReLocationDoc();
AssignmentStatus sts=assignment.AssignmentStatus.OrderByDescending(ass=>ass.Id).First();
assignmentDoc.CurrentStatus=sts.Status.Zone;
状态currentStatus=sts.状态;
IList items=assignment.items.ToList();
IList itemDocs=新列表();
foreach(项目中的项目){
ItemDoc ItemDoc=FillItemDoc(项目);
项目详情项目详情;
if(ItemDetail.TryGet(db、item.Id、out ItemDetail)){
ItemDetailDoc ItemDetailDoc=FillItemDetailDoc(itemDetail);
itemDoc.Details=新的ItemDetailDoc[1];
事件eEvent=null;
if(Event.GetEvent(db、itemDetail、currentStatus、out-eEvent)){
EventDoc EventDoc=FillEventDoc(eEvent);
itemDetailDoc.Events=新的EventDoc[1];
if(eEvent.LocationId.HasValue){
位置=空;
if(Location.TryGet(db,eEvent.LocationId.Value,out位置)){
eventDoc.Location=新位置doc();
eventDoc.Location=FillLocationDoc(位置,db);
}
}
itemDetailDoc.Events[0]=eventDoc;
}
itemDoc.Details[0]=itemDetailDoc;
}
itemDocs.Add(itemdock);
}
assignmentDoc.Items=itemDocs.ToArray();
单据转让=转让单据;
}
},代表(例外情况e){
结果消息=e消息;
});
reLocationDoc=doc;
返回结果;
}最后{
Trace(“Exit GetRelocationAssignment()”;
}
}
在所有这些代码中,返回数据都很好。它仅在传递到webmetod时丢失数据


在此处输入代码。

确保使用两端相同的大小写访问XML标记。如果大小写不相同,则不会读取该值。

确保使用两端相同的大小写访问XML标记。如果大小写不一样,则不会读取值。

此外,消息中XML标记的顺序也会有所不同-大约两年前我遇到过类似的问题,在这种情况下,参数值在传输过程中出现不一致,因为发送部分对标记的排序与模式中定义的不同。

此外,消息中XML标记的排序也会有所不同-大约两年前我遇到过类似的问题,在这种情况下,参数值在传输过程中不显示,因为发送部分对标记的排序与模式中定义的不同。

您应该检查所有从Web服务发回的消息。手动调用Web服务并检查其响应

  • 如果所有数据都存在,那么您的webservice引用可能已经过时;通过右键单击您的Web服务引用并选择“更新”来更新它
  • 如果您的数据没有返回,您的问题可能与Web服务代码有关。您应该再次检查序列化代码(如果有),并确保所有返回的类型都是
    [Serializable]
    。您应该检查所有的返回类型是否都是公共的,因为序列化是必需的

正如John Saunders所指出的,
[Serializable]
不是由
XmlSerializer

使用的,您应该检查所有从Web服务发回的消息。手动调用Web服务并检查其响应

  • 如果所有数据都存在,那么您的webservice引用可能已经过时;通过右键单击webservice引用并选择“更新”来更新它