代码之家  ›  专栏  ›  技术社区  ›  Ross Bush

无法从ssrs正确发送wcf messagecontract的参数

  •  0
  • Ross Bush  · 技术社区  · 7 年前

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

    由于需要通过SSRS报告调用我们的WCF Web服务,我选择了基于当前服务配置的最佳示例。解决方案在大多数情况下都有效,但是,我认为我可能会破坏参数有效载荷。SSR中没有内置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" };
        }
    }
    

    数据源-配置为向WCF终结点返回具有有效URL的XML

    数据集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

    数据集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>
    

    看看10号左右 enter image description here

    数据集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 回复  |  直到 7 年前
        1
  •  0
  •   Ross Bush    7 年前

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

    一旦我在XML中按字母顺序排列了参数,所有的参数就在一起了。可能还有另一种方法来指定参数顺序,但是,按字母顺序排列对我来说是有效的。