передача параметра в веб-сервис asmx при использовании c # - PullRequest
0 голосов
/ 28 июня 2018

Я создал asmx webservice, как показано ниже

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public void GetEmployeesJSONByID(int sId)
{
    try
    {
        string sResult = string.Empty;
        List<Employee> lstEmp = new List<Employee>();

        List<Employee> lstEmpNew = new List<Employee>();

        lstEmp.Add(new Employee { Id = 101, Name = "Nitin", Salary = 10000 });
        lstEmp.Add(new Employee { Id = 102, Name = "Dinesh", Salary = 20000 });

        switch (sId)
        {
            case 101:
                lstEmpNew.Add(new Employee { Id = 101, Name = "Nitin", Salary = 10000 });
                break;
            case 102:
                lstEmpNew.Add(new Employee { Id = 102, Name = "Dinesh", Salary = 20000 });
                break;
            default:
                break;
        }
        JavaScriptSerializer js = new JavaScriptSerializer();
        sResult = js.Serialize(lstEmpNew);

        Context.Response.Write(sResult);
    }
    catch (Exception ex)
    {
        Context.Response.Write(ex.Message.ToString());
    }
}

Я хочу использовать этот веб-сервис на C #. поэтому я использовал следующий код

string url = http://XXXXXX/SampleWebService/Service.asmx/GetEmployeesJSONByID;
HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(url);
webreq.Headers.Clear();
webreq.Method = "GET";

Encoding encode = Encoding.GetEncoding("utf-8");
HttpWebResponse webres = null;
webres = (HttpWebResponse)webreq.GetResponse();
Stream reader = null;
reader = webres.GetResponseStream();
StreamReader sreader = new StreamReader(reader, encode, true);
string result = sreader.ReadToEnd();
sOutput = result;

Как передать этот идентификатор в качестве параметра из C # для проверки этого веб-сервиса?

1 Ответ

0 голосов
/ 28 июня 2018

Для использования веб-сервиса, щелкните правой кнопкой мыши по вашему проекту и выберите «Добавить сервисную ссылку» и добавьте ваш URL

 http://XXXXXX/SampleWebService/Service.asmx

Это создаст прокси-класс в вашем проекте. Затем создайте экземпляр этого прокси-класса в своем коде и передайте требуемый параметр вызывающему методу. например,

ClsWebserviceProxy objProxy = new ClsWebserviceProxy();
objProxy.GetEmployeesJSONByID(5);

Для использования динамического URL, вы можете попробовать следующий код,

    public void add()
    {
        var _url = "http://www.dneonline.com/calculator.asmx";
        var _action = "http://www.dneonline.com/calculator.asmx?op=Add";
        string methodName = "Add";

        XmlDocument soapEnvelopeXml = CreateSoapEnvelope(methodName);
        HttpWebRequest webRequest = CreateWebRequest(_url, _action);
        InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);

        // begin async call to web request.
        IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);

        // suspend this thread until call is complete. You might want to
        // do something usefull here like update your UI.
        asyncResult.AsyncWaitHandle.WaitOne();

        // get the response from the completed web request.
        string soapResult;
        using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
        {
            using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
            {
                soapResult = rd.ReadToEnd();
            }
            Console.Write(soapResult);
        }
    }

    private static HttpWebRequest CreateWebRequest(string url, string action)
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
        webRequest.Headers.Add("SOAPAction", action);
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        return webRequest;
    }

    private static XmlDocument CreateSoapEnvelope(string methodName)
    {
        XmlDocument soapEnvelopeDocument = new XmlDocument();
        string soapStr =
                   @"<?xml version=""1.0"" encoding=""utf-8""?>
                    <soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
                       xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
                       xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
                      <soap:Body>
                        <{0} xmlns=""http://tempuri.org/"">
                          {1}
                        </{0}>
                      </soap:Body>
                    </soap:Envelope>";
        string postValues = "";
        Dictionary<string, string> Params = new Dictionary<string, string>();
        //< "name" > Name of the WebMethod parameter (case sensitive)</ param >
        //< "value" > Value to pass to the paramenter </ param >
        Params.Add("intA", "5"); // Add parameterName & Value to dictionary
        Params.Add("intB", "10");
        foreach (var param in Params)
        {
            postValues += string.Format("<{0}>{1}</{0}>", param.Key, param.Value);
        }
        soapStr = string.Format(soapStr, methodName, postValues);

        soapEnvelopeDocument.LoadXml(soapStr);
        return soapEnvelopeDocument;
    }

    private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
    {
        try
        {
            using (Stream stream = webRequest.GetRequestStream())
            {
                soapEnvelopeXml.Save(stream);
            }
        }
        catch (Exception ex)
        {

        }

    }

Источник https://www.roelvanlisdonk.nl/2011/01/28/how-to-call-a-soap-web-service-in-net-4-0-c-without-using-the-wsdl-or-proxy-classes/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...