无法从SSRS正确发送WCF MessageContract的参数

时间:2018-07-18 18:11:28

标签: asp.net xml wcf soap reporting-services

我正在研究一种独特的解决方案,并且在一天的大部分时间里都遇到了异常情况。

被要求通过SSRS报告调用WCF Web服务时,我根据当前服务配置选择了最佳示例。该解决方案在大多数情况下都有效,但是,我认为我可能正在处理参数有效负载。 ssrs中没有内置wsdl生成器,因此我正在逐步进行此操作:(下面的参数配置中是否有任何异常之处?

当变量全为一个字符时,有效载荷已成功发送,但是,当我使用常规参数名称时,除第一个变量外,变量均作为默认值出现。有帮助吗?

服务(简单示例)

[MessageContract(IsWrapped = true)]
public class ServiceResponse
{
    [MessageBodyMember]
    public string Result;
}

[MessageContract(IsWrapped = true)]
public class ServiceRequest
{
    [MessageBodyMember]
    public int A { get; set; }
    [MessageBodyMember]
    public int B { get; set; }
    [MessageBodyMember]
    public int C { get; set; }
    [MessageBodyMember]
    public string D { get; set; }
    [MessageBodyMember]
    public string E { get; set; }
    [MessageBodyMember]
    public string F { get; set; }
    [MessageBodyMember]
    public string G { get; set; }
    [MessageBodyMember]
    public string H { get; set; }
    [MessageBodyMember]
    public int I { get; set; }
}

[ServiceContract]   
public interface IService
{
    [OperationContract]
    ServiceResponse Process(ServiceRequest request);       
}   

public class Service : IService
{
    public ServiceResponse Process(ServiceRequest request)
    {
        return new ServiceResponse { Result = "OK" };
    }
}

数据源-配置为将具有有效URL的XML返回到wcf端点

DataSet XML查询1(实际上效果很好)

<Query>
    <Method Name="ServiceRequest" Namespace="http://tempuri.org/">
      <Parameters >
          <Parameter Name="A"><DefaultValue>1</DefaultValue></Parameter>
          <Parameter Name="B"><DefaultValue>2</DefaultValue></Parameter>
          <Parameter Name="C"><DefaultValue>3</DefaultValue></Parameter>
          <Parameter Name="D"><DefaultValue>4</DefaultValue></Parameter>
          <Parameter Name="E"><DefaultValue>5</DefaultValue></Parameter>
          <Parameter Name="F"><DefaultValue>6</DefaultValue></Parameter>
          <Parameter Name="G"><DefaultValue>7</DefaultValue></Parameter>
          <Parameter Name="H"><DefaultValue>8</DefaultValue></Parameter> 
          <Parameter Name="I"><DefaultValue>9</DefaultValue></Parameter>
          <Parameter Name="J"><DefaultValue>10</DefaultValue></Parameter>      
     </Parameters>
    </Method>
    <SoapAction>
        http://tempuri.org/IService/Process
    </SoapAction>
</Query>

这是电线上的... enter image description here

DataSet XML查询2(不起作用)

<Query>
    <Method Name="ServiceRequest" Namespace="http://tempuri.org/">
      <Parameters >
      <Parameter Name="SomeId1"><DefaultValue>1</DefaultValue></Parameter>
      <Parameter Name="SomeId2"><DefaultValue>2</DefaultValue></Parameter>
      <Parameter Name="SomeId3"><DefaultValue>3</DefaultValue></Parameter>
      <Parameter Name="SomeId4"><DefaultValue>4</DefaultValue></Parameter>
      <Parameter Name="SomeId5"><DefaultValue>5</DefaultValue></Parameter>
      <Parameter Name="SomeId6"><DefaultValue>6</DefaultValue></Parameter>
      <Parameter Name="SomeId7"><DefaultValue>7</DefaultValue></Parameter>
      <Parameter Name="SomeId8"><DefaultValue>8</DefaultValue></Parameter> 
      <Parameter Name="SomeId9"><DefaultValue>9</DefaultValue></Parameter>
      <Parameter Name="SomeId10"><DefaultValue>10</DefaultValue></Parameter>      
       </Parameters>
    </Method>
    <SoapAction>
         http://tempuri.org/IService/Process
    </SoapAction>
</Query>

看SomeId10 enter image description here

DataSet XML查询2(Fubar)

<Query>
    <Method Name="ServiceRequest" Namespace="http://tempuri.org/">
      <Parameters >
      <Parameter Name="ZUserId"><DefaultValue>1</DefaultValue></Parameter>
      <Parameter Name="YHisId"><DefaultValue>2</DefaultValue></Parameter>
      <Parameter Name="XHerId"><DefaultValue>3</DefaultValue></Parameter>
      <Parameter Name="AYourId"><DefaultValue>4/DefaultValue></Parameter>
      <Parameter Name="BStrippedZebraId"><DefaultValue>5</DefaultValue></Parameter>
      <Parameter Name="MyId1"><DefaultValue>6</DefaultValue></Parameter>
      <Parameter Name="MyId10"><DefaultValue>7</DefaultValue></Parameter>
      <Parameter Name="MyId01"><DefaultValue>8</DefaultValue></Parameter> 
      <Parameter Name="FooBarId"><DefaultValue>9</DefaultValue></Parameter>
       </Parameters>
    </Method>
    <SoapAction>
         http://tempuri.org/IService/Process
    </SoapAction>
</Query>

看看???? enter image description here

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,以防将来对任何人有帮助。

一旦我按字母顺序在XML中对参数进行排序,所有这些都将组合在一起。可能还有另一种指定参数顺序的方法,但是按字母顺序将它们放在对我有用的位置。