首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WF4 WCF关联和MessageContract不起作用

WF4 WCF关联和MessageContract不起作用
EN

Stack Overflow用户
提问于 2012-02-10 01:17:25
回答 2查看 2.9K关注 0票数 2

我有一个WF4 WCF服务,我正在尝试通过soap消息使用基于内容的工作来获得相关性。

我收到以下错误消息:

代码语言:javascript
复制
<Message>A correlation query yielded an empty result set. Please ensure correlation queries for the endpoint are correctly configured.</Message>
           <StackTrace><![CDATA[at System.ServiceModel.Activities.Dispatcher.CorrelationKeyCalculator.Calculator`1.CalculateKeys(T target, Message messageToReadHeaders, InstanceKey& instanceKey, ICollection`1& additionalKeys)
   at System.ServiceModel.Activities.Dispatcher.ControlOperationInvoker.GetInstanceKeys(OperationContext operationContext, InstanceKey& instanceKey, ICollection`1& additionalKeys)
at System.ServiceModel.Activities.Dispatcher.ControlOperationInvoker.ControlOperationAsyncResult.EnsureInstanceId()
at System.ServiceModel.Activities.Dispatcher.ControlOperationInvoker.ControlOperationAsyncResult.Process()
at System.ServiceModel.Activities.Dispatcher.ControlOperationInvoker.ControlOperationAsyncResult..ctor(ControlOperationInvoker invoker, Object[] inputs, IInvokeReceivedNotification notification, TimeSpan timeout, AsyncCallback callback, Object state)
at System.ServiceModel.Activities.Dispatcher.ControlOperationInvoker.InvokeBegin(Object instance, Object[] inputs, IInvokeReceivedNotification notification, AsyncCallback callback, Object state)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)]]></StackTrace>

这是我的班级

代码语言:javascript
复制
[MessageContract(IsWrapped = false)]
public class ClaimObj
{
    [MessageHeader]
    public string CorrelationId { get; set; }

    [MessageBodyMember]
    public string InstanceId { get; set; }
}

下面是我的xaml,由于专有原因,名称空间发生了变化

代码语言:javascript
复制
<Activity mc:Ignorable="sap" x:Class="Project.WorkFlow.Activities.Activity4" sap:VirtualizedContainerService.HintSize="654,676" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:p="http://ns.ns2.com/" xmlns:p1="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel" xmlns:qm="clr-namespace:Project.MessageWrappers;assembly=Project.MessageWrappers" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:sa="clr-namespace:System.Activities;assembly=System.Activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:ssa="clr-namespace:System.ServiceModel.Activities;assembly=System.ServiceModel.Activities" xmlns:ssx="clr-namespace:System.ServiceModel.XamlIntegration;assembly=System.ServiceModel" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Flowchart sad:XamlDebuggerXmlReader.FileName="D:\Activity4.xaml" sap:VirtualizedContainerService.HintSize="614,636">
<Flowchart.Variables>
  <Variable x:TypeArguments="qm:ClaimObj" Name="RequestObj" />
  <Variable x:TypeArguments="p1:CorrelationHandle" Name="handle" />
</Flowchart.Variables>
<sap:WorkflowViewStateService.ViewState>
  <scg3:Dictionary x:TypeArguments="x:String, x:Object">
    <x:Boolean x:Key="IsExpanded">False</x:Boolean>
    <av:Point x:Key="ShapeLocation">270,2.5</av:Point>
    <av:Size x:Key="ShapeSize">60,75</av:Size>
    <av:PointCollection x:Key="ConnectorLocation">300,77.5 300,107.5 290,107.5 290,115</av:PointCollection>
  </scg3:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<Flowchart.StartNode>
  <FlowStep x:Name="__ReferenceID1">
    <sap:WorkflowViewStateService.ViewState>
      <scg3:Dictionary x:TypeArguments="x:String, x:Object">
        <av:Point x:Key="ShapeLocation">162.5,115</av:Point>
        <av:Size x:Key="ShapeSize">255,90</av:Size>
        <av:PointCollection x:Key="ConnectorLocation">290,205 290,235</av:PointCollection>
      </scg3:Dictionary>
    </sap:WorkflowViewStateService.ViewState>
    <p1:Receive x:Name="__ReferenceID0" CanCreateInstance="True" CorrelatesWith="[handle]" sap:VirtualizedContainerService.HintSize="255,90" OperationName="Process" ServiceContractName="p:IActivity4Service">
      <p1:Receive.CorrelatesOn>
        <p1:XPathMessageQuery x:Key="key1">
          <p1:XPathMessageQuery.Namespaces>
            <ssx:XPathMessageContextMarkup>
              <x:String x:Key="xg0">http://schemas.datacontract.org/2004/07/Project.MessageWrappers</x:String>
            </ssx:XPathMessageContextMarkup>
          </p1:XPathMessageQuery.Namespaces>sm:header()/tempuri:CorrelationId</p1:XPathMessageQuery>
      </p1:Receive.CorrelatesOn>
      <p1:ReceiveMessageContent DeclaredMessageType="qm:ClaimObj">
        <OutArgument x:TypeArguments="qm:ClaimObj">[RequestObj]</OutArgument>
      </p1:ReceiveMessageContent>
    </p1:Receive>
    <FlowStep.Next>
      <FlowStep x:Name="__ReferenceID2">
        <sap:WorkflowViewStateService.ViewState>
          <scg3:Dictionary x:TypeArguments="x:String, x:Object">
            <av:Point x:Key="ShapeLocation">162.5,235</av:Point>
            <av:Size x:Key="ShapeSize">255,90</av:Size>
          </scg3:Dictionary>
        </sap:WorkflowViewStateService.ViewState>
        <p1:SendReply Request="{x:Reference __ReferenceID0}" DisplayName="SendReplyToReceive" sap:VirtualizedContainerService.HintSize="255,90">
          <p1:SendMessageContent DeclaredMessageType="qm:ClaimObj">
            <InArgument x:TypeArguments="qm:ClaimObj">[RequestObj]</InArgument>
          </p1:SendMessageContent>
        </p1:SendReply>
      </FlowStep>
    </FlowStep.Next>
  </FlowStep>
</Flowchart.StartNode>
<x:Reference>__ReferenceID1</x:Reference>
<x:Reference>__ReferenceID2</x:Reference>

我知道问题出在关联的xpath上。我尝试了许多不同的想法,唯一有效的是11445 (http://msdn.microsoft.com/en-us/library/ee358742.aspx),但这不能给我提供具有相关性的跟踪。这些都不起作用

代码语言:javascript
复制
sm:body()/xg0:ClaimObj/xg0:CorrelationId    
sm:header()/tempuri:CorrelationId
sm:header()/xg0:ClaimObj/xg0:CorrelationId
sm:header()/tempuri:ClaimObj/tempuri:CorrelationId

我可以让它很好地与DataContracts一起工作,但我需要使用MessageContracts

更新:以下是我真正需要做的:

接收请求

向服务器X发送单向wcf调用

(第二次接收)服务器X在新的wcf调用中使用关联id发回工作流,而不是回复

做一些其他的事情

向原始接收发送回复

这是我正在尝试的基本工作流程。问题是,由于找不到xpath,所以没有调用第二个接收。

顺便说一句,当我尝试在第一个接收中使用correlationinitializer时,我得到了同样的问题

代码语言:javascript
复制
<Activity mc:Ignorable="sap" x:Class="Project.WorkFlow.Activities.Activity4" sap:VirtualizedContainerService.HintSize="828,872" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:p="http://ns.domain.com/" xmlns:p1="http://schemas.microsoft.com/netfx/2009/xaml/servicemodel" xmlns:qm="clr-namespace:Project.MessageWrappers;assembly=Project.MessageWrappers" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:sa="clr-namespace:System.Activities;assembly=System.Activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:ssa="clr-namespace:System.ServiceModel.Activities;assembly=System.ServiceModel.Activities" xmlns:ssx="clr-namespace:System.ServiceModel.XamlIntegration;assembly=System.ServiceModel" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Flowchart sad:XamlDebuggerXmlReader.FileName="D:\Activity4.xaml" sap:VirtualizedContainerService.HintSize="788,832">
<Flowchart.Variables>
  <Variable x:TypeArguments="qm:ClaimObj" Name="RequestObj" />
  <Variable x:TypeArguments="p1:CorrelationHandle" Name="handle" />
  <Variable x:TypeArguments="qm:GetClaimObj" Name="GetClaimIn" />
</Flowchart.Variables>
<sap:WorkflowViewStateService.ViewState>
  <scg3:Dictionary x:TypeArguments="x:String, x:Object">
    <x:Boolean x:Key="IsExpanded">False</x:Boolean>
    <av:Point x:Key="ShapeLocation">270,2.5</av:Point>
    <av:Size x:Key="ShapeSize">60,75</av:Size>
    <av:PointCollection x:Key="ConnectorLocation">300,77.5 300,107.5 290,107.5 290,115</av:PointCollection>
    <x:Double x:Key="Width">773.5</x:Double>
    <x:Double x:Key="Height">796.04</x:Double>
  </scg3:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<Flowchart.StartNode>
  <FlowStep x:Name="__ReferenceID1">
    <sap:WorkflowViewStateService.ViewState>
      <scg3:Dictionary x:TypeArguments="x:String, x:Object">
        <av:Point x:Key="ShapeLocation">162.5,115</av:Point>
        <av:Size x:Key="ShapeSize">255,90</av:Size>
        <av:PointCollection x:Key="ConnectorLocation">290,205 290,209 241,209 241,239</av:PointCollection>
      </scg3:Dictionary>
    </sap:WorkflowViewStateService.ViewState>
    <p1:Receive x:Name="__ReferenceID0" CanCreateInstance="True" CorrelatesWith="[handle]" sap:VirtualizedContainerService.HintSize="255,90" OperationName="Process" ServiceContractName="p:IActivity4Service">
      <p1:Receive.KnownTypes>
        <x:Type Type="qm:ClaimObj" />
      </p1:Receive.KnownTypes>
      <p1:ReceiveMessageContent DeclaredMessageType="qm:ClaimObj">
        <OutArgument x:TypeArguments="qm:ClaimObj">[RequestObj]</OutArgument>
      </p1:ReceiveMessageContent>
    </p1:Receive>
    <FlowStep.Next>
      <FlowStep x:Name="__ReferenceID2">
        <sap:WorkflowViewStateService.ViewState>
          <scg3:Dictionary x:TypeArguments="x:String, x:Object">
            <av:Point x:Key="ShapeLocation">120,239</av:Point>
            <av:Size x:Key="ShapeSize">242,93</av:Size>
            <av:PointCollection x:Key="ConnectorLocation">241,332 240,332 240,355</av:PointCollection>
          </scg3:Dictionary>
        </sap:WorkflowViewStateService.ViewState>
        <p1:InitializeCorrelation Correlation="[handle]" sap:VirtualizedContainerService.HintSize="242,93">
          <InArgument x:TypeArguments="x:String" x:Key="key1">[RequestObj.CorrelationId]</InArgument>
        </p1:InitializeCorrelation>
        <FlowStep.Next>
          <FlowStep x:Name="__ReferenceID3">
            <sap:WorkflowViewStateService.ViewState>
              <scg3:Dictionary x:TypeArguments="x:String, x:Object">
                <av:Point x:Key="ShapeLocation">112.5,355</av:Point>
                <av:Size x:Key="ShapeSize">255,90</av:Size>
                <av:PointCollection x:Key="ConnectorLocation">240,445 240,475 241,475 241,479</av:PointCollection>
              </scg3:Dictionary>
            </sap:WorkflowViewStateService.ViewState>
            <p1:Receive CorrelatesWith="[handle]" sap:VirtualizedContainerService.HintSize="255,90" OperationName="GetClaim" ServiceContractName="p:IActivity4Service">
              <p1:Receive.CorrelatesOn>
                <p1:XPathMessageQuery x:Key="key1">
                  <p1:XPathMessageQuery.Namespaces>
                    <ssx:XPathMessageContextMarkup>
                      <x:String x:Key="xg0">http://schemas.datacontract.org/2004/07/Project.MessageWrappers</x:String>
                    </ssx:XPathMessageContextMarkup>
                  </p1:XPathMessageQuery.Namespaces>sm:header()/xg0:CorrelationId</p1:XPathMessageQuery>
              </p1:Receive.CorrelatesOn>
              <p1:ReceiveMessageContent DeclaredMessageType="qm:GetClaimObj">
                <OutArgument x:TypeArguments="qm:GetClaimObj">[GetClaimIn]</OutArgument>
              </p1:ReceiveMessageContent>
            </p1:Receive>
            <FlowStep.Next>
              <FlowStep x:Name="__ReferenceID4">
                <sap:WorkflowViewStateService.ViewState>
                  <scg3:Dictionary x:TypeArguments="x:String, x:Object">
                    <av:Point x:Key="ShapeLocation">120,479</av:Point>
                    <av:Size x:Key="ShapeSize">242,58</av:Size>
                    <av:PointCollection x:Key="ConnectorLocation">241,537 240,537 240,565</av:PointCollection>
                  </scg3:Dictionary>
                </sap:WorkflowViewStateService.ViewState>
                <Assign sap:VirtualizedContainerService.HintSize="242,58">
                  <Assign.To>
                    <OutArgument x:TypeArguments="x:String">[GetClaimIn.InstanceId]</OutArgument>
                  </Assign.To>
                  <Assign.Value>
                    <InArgument x:TypeArguments="x:String">Get is called</InArgument>
                  </Assign.Value>
                </Assign>
                <FlowStep.Next>
                  <FlowStep x:Name="__ReferenceID5">
                    <sap:WorkflowViewStateService.ViewState>
                      <scg3:Dictionary x:TypeArguments="x:String, x:Object">
                        <av:Point x:Key="ShapeLocation">112.5,565</av:Point>
                        <av:Size x:Key="ShapeSize">255,90</av:Size>
                      </scg3:Dictionary>
                    </sap:WorkflowViewStateService.ViewState>
                    <p1:SendReply Request="{x:Reference __ReferenceID0}" DisplayName="SendReplyToReceive" sap:VirtualizedContainerService.HintSize="255,90">
                      <p1:SendMessageContent DeclaredMessageType="qm:GetClaimObj">
                        <InArgument x:TypeArguments="qm:GetClaimObj">[GetClaimIn]</InArgument>
                      </p1:SendMessageContent>
                    </p1:SendReply>
                  </FlowStep>
                </FlowStep.Next>
              </FlowStep>
            </FlowStep.Next>
          </FlowStep>
        </FlowStep.Next>
      </FlowStep>
    </FlowStep.Next>
  </FlowStep>
</Flowchart.StartNode>
<x:Reference>__ReferenceID1</x:Reference>
<x:Reference>__ReferenceID2</x:Reference>
<x:Reference>__ReferenceID3</x:Reference>
<x:Reference>__ReferenceID4</x:Reference>
<x:Reference>__ReferenceID5</x:Reference>
EN

回答 2

Stack Overflow用户

发布于 2012-02-10 03:40:12

我缺少你的XAML中的CorrelationInitializers。CorrelationInitializers用于创建接收或SendReply活动与原始请求的关联。之后,在后续的接收活动中使用该CorrelatesOn。

票数 1
EN

Stack Overflow用户

发布于 2012-05-11 17:58:11

我刚刚遇到了同样的问题,你链接的文章实际上帮助我解决了这个问题。在这一页的四分之三处,有一段话是这样写的……

如果XPath查询的配置不正确,导致未检索到相关数据,则会返回错误,并显示以下消息:"A correlation result set a empty result set。请确保已正确配置端点的相关查询。“解决此问题的一种快速方法是将XPath查询替换为上一节中描述的文字值。如果您在“添加相关初始值设定项”或“CorrelatesOn定义”对话框中使用XPath查询生成器,并且您的工作流服务使用消息协定,则可能会发生此问题。

该对话框始终生成针对邮件正文属性的查询,即使您选择的属性是邮件标题的一部分。访问标头属性的正确查询为:

代码语言:javascript
复制
sm:header()/namespace:property

请注意,属性名称不是由包含的对象限定的,因此以下查询应该适用:

代码语言:javascript
复制
sm:header()/tempuri:CorrelationId

如果要更改header属性的命名空间,请使用MessageHeaderAttribute类的Namespace属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9215551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档