locked
MVC and Consuming Web Services Reference - SOAP RRS feed

  • Question

  • User1391845369 posted

    I have bee working with .NET MVC and C# for about a year now so I am a little green and need of some guidance on a project. 

    So I currently have a .NET C# MVC project and within that project I have created a a Service Reference  to following service NemsisPmWsPort:

    https://perfmeasures.nemsis.org/perfMeasureWs.wsdl

    It created proxy reference to all the methods. 

    At this point I am totally in the dark on how to write C# code in MVC to get a handle on the data.

    There is a technical guide posted at this location and it gives the Request  parameters Response:

    https://nemsis.org/wp-content/uploads/2019/06/NEMSISV3PerformanceMeasureServiceTechnicalGuide.pdf

    Example:

    The service also supports segmentation of performance measure data (analogous to the “group by” clause in an SQL query). To request the benchmark results to be segmented by a parameter, use the RetrieveBenchmark request with one <segment> element. The following example demonstrates a request for benchmark data for the Trauma-01 measure segmented (or grouped) by Urbanicity:

    The request:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.nemsis.org/">   
    <soapenv:Header/>
    <soapenv:Body>
    <ws:RetrieveBenchmarkRequest>
    <ws:benchmark id="Trauma-01">
    <ws:segment>Urbanicity</ws:segment>
    </ws:benchmark>
    </ws:RetrieveBenchmarkRequest>
    </soapenv:Body>
    </soapenv:Envelope>

    The service will return a message that contains segmented benchmark data providing a result for each member of the Urbanicity parameter:

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns2="http://ws.nemsis.org/"> <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
    <ns2:RetrieveBenchmarkResponse>
    <ns2:database>
    <ns2:databaseUpdateDateTime>2019-06-01T12:12:28.510-06:00
    </ns2:databaseUpdateDateTime>
    <ns2:databaseRecords>23821188</ns2:databaseRecords>
    </ns2:database>
    <ns2:benchmark id="Trauma-01">
    <ns2:segment>Urbanicity</ns2:segment>
    </ns2:benchmark>
    <ns2:data denominatorType="xs:nonNegativeInteger" numeratorType="xs:nonNegativeInteger" records="3149842" states="45">
    <ns2:result records="2449638" segmentMember="P01001">
    <ns2:numerator>1318293</ns2:numerator>
    <ns2:denominator>2449638</ns2:denominator>
    </ns2:result>
    <ns2:result records="222938" segmentMember="P01002">
    <ns2:numerator>137506</ns2:numerator>
    <ns2:denominator>222938</ns2:denominator>
    </ns2:result>
    <ns2:result records="258992" segmentMember="P01003">
    <ns2:numerator>152531</ns2:numerator>
    <ns2:denominator>258992</ns2:denominator>
    </ns2:result>
    <ns2:result records="71126" segmentMember="P01004">
    <ns2:numerator>43252</ns2:numerator>
    <ns2:denominator>71126</ns2:denominator>
    </ns2:result>
    <ns2:result records="147148" segmentMember="P01005">
    <ns2:numerator>80869</ns2:numerator>
    <ns2:denominator>147148</ns2:denominator>
    </ns2:result>
    </ns2:data>
    </ns2:RetrieveBenchmarkResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    A request may include zero or more <filter> elements and zero or one <segment> element.

    Friday, August 16, 2019 7:59 PM

All replies

  • User1520731567 posted

    Hi steven0608,

    It created proxy reference to all the methods. 

    Did you created proxy reference by Add Service Reference?

    If so,I test according to your link. Since I don't have permission, I can't completely reproduce your problem. You could refer to my code:

    ServiceReference1.NemsisPmWsPortClient re = new ServiceReference1.NemsisPmWsPortClient();
    
                re.RetrieveBenchmark(new ServiceReference1.RetrieveBenchmarkRequest() {
                    benchmark = new ServiceReference1.BenchmarkRequest() {
                        filter = new ServiceReference1.Filter[1] {new ServiceReference1.Filter { parameter = "P01001", Value = "201712" } } } }  );

    Best Regards.

    Yuki Tao

    Monday, August 19, 2019 9:10 AM
  • User1391845369 posted

    Yes, I created the proxy reference to all the methods.  Since I am kind of new to C# I was unsure on what to from this point. 

    Wednesday, August 21, 2019 2:54 PM
  • User1391845369 posted

    I believe all this data is public, it should not require any credentials to pull the national data.  I am going to create a new controller and view and test out your code to see where that gets me. 

    Wednesday, August 21, 2019 3:24 PM
  • User1391845369 posted

    Where you getting error

    Name Value Type
    Channel The function evaluation requires all threads to run. NEMSIS.PerformanceMeasures.NemsisPmWsPort.NemsisPmWsPort
    Wednesday, August 21, 2019 4:09 PM
  • User1391845369 posted

    I am still a little lost on what your code does and how you determined what direction you went?  Can you explain your code please?

    Wednesday, August 21, 2019 4:20 PM
  • User1391845369 posted

    Two other questions that involve this same method because I am trying to figure out how you know what syntax and calls to make:

    So how would I make this request using C# and the reference classes and methods and get the correct response back?

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.nemsis.org/">   
    <soapenv:Header/> <soapenv:Body>
    <ws:ListBenchmarksRequest/>
    </soapenv:Body>
    </soapenv:Envelope>

    This response should be:

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">   
    <SOAP-ENV:Header/>
    <SOAP-ENV:Body>
    <ns2:ListBenchmarksResponse xmlns:ns2="http://ws.nemsis.org/">
    <ns2:benchmark id="Trauma-01" numeratorType="xs:nonNegativeInteger" denominatorType="xs:nonNegativeInteger">Pain Assessment of Injured Patients</ns2:benchmark>
    <ns2:benchmark id="Seizure-01" numeratorType="xs:nonNegativeInteger" denominatorType="xs:nonNegativeInteger">Blood Glucose Evaluation</ns2:benchmark>
    <ns2:benchmark id="Stroke-01" numeratorType="xs:nonNegativeInteger" denominatorType="xs:nonNegativeInteger">Suspected Stroke Receiving Prehospital Stroke Assessment</ns2:benchmark>
    </ns2:ListBenchmarksResponse>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    I would also like to return these values to a view.  How would I go about doing that as well? 

    Wednesday, August 21, 2019 8:57 PM
  • User1391845369 posted

    So after looking at your code and taking stab after stab I came up with this code to grab the "Truama-01" data in my NEMSISmeasuresWSRController.cs

    Now I have to pull the retrieve the response and display then display the <numerator>69523</numerator>
    <denominator>128505</denominator>  into a view.   Some help we be much appreciated. 

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Data;
    using NEMSIS.PerformanceMeasures.Models;
    //using NEMSIS.PerformanceMeasures.NemsisPmWsPort;
    
    namespace NEMSIS.PerformanceMeasures.Controllers
    {
        public class NEMSISmeasuresWSRController : Controller
        {
            // GET: NEMSISmeasuresWSR
            public ActionResult Index()
            {
        
                using (var client = new NemsisPmWsPort.NemsisPmWsPortClient())
                {
                    
                    var request = new NemsisPmWsPort.RetrieveBenchmarkRequest();
                    request.benchmark = new NemsisPmWsPort.BenchmarkRequest();
                    request.benchmark.id = "Trauma-01";
                    request.benchmark.filter = new NemsisPmWsPort.Filter[] {
                        new NemsisPmWsPort.Filter { parameter = "Urbanicity", Value = "P01001" },
                        new NemsisPmWsPort.Filter { parameter = "CalendarMonth", Value = "201712" }                    
                    };
                    var response = client.RetrieveBenchmark(request);
    
                }
                
               //Not returning anything yet. I will need to user the RetriveBenchmarkResponse mehtod to retrieve my data response from the service.
                return View("Home");
    
    
    
            }
        }
    }

    Thursday, August 22, 2019 12:14 AM