Search code examples
asp.netxmlwcfsoapreporting-services

Parameters for a WCF MessageContract not being sent correctly from SSRS


I am working on a unique solution and have been running into an anomaly for most of the day.

Being required to call our to a WCF web service via an SSRS report, I picked the best example based on the current service configuration. The solution works for the most part, however, I think I may be mangling the parameter payload. There is no wsdl generator built into ssrs so I am doing this step by step :( Does anything in my parameter configuration below seem out of the ordinary?

When the variables are all one character in length the payload is sent successfully, however, when I use normal parameter names, the variables come across as default values except for the first one. Any help?

The Service (Simple Example)

[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" };
    }
}

Data Source - Configured to return XML with a valid url to the wcf endpoint

DataSet XML Query 1 (This Actually Works Great)

<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>

This comes over the wire... enter image description here

DataSet XML Query 2 (Not Working)

<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>

Look at SomeId10 enter image description here

DataSet XML Query 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>

Look at ???? enter image description here


Solution

  • Answering my own question in case it helps anyone out in the future.

    Once I ordered the parameters alphabetically in the XML it all came together. There may be another way to specify parameter order, however, placing them alphabetically worked for me.