从控制台应用程序中使用Web服务

时间:2015-03-05 16:08:24

标签: c# web-services console-application

我有一个Web服务,可以创建一个JSON包(或者你想要的任何名称),如下所示:

 [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public void MyMethod(string letters, int number)
        {
            try
            {
                Dictionary<string, object> result = new Dictionary<string, object>();

                //Do some stuff here

                result.Add("data1", 1);
                result.Add("data2", "second value");

                JavaScriptSerializer s= new JavaScriptSerializer();
                Context.Response.Clear();
                Context.Response.ContentType = "application/json; charset=utf-8";
                Context.Response.Flush();
                Context.Response.Write(s.Serialize(result));
            }
            catch (Exception ex)
            {

            }
        }

当我测试它时,我得到了一个很好的回应,如下所示: {&#34; data1&#34;:1,&#34; data2&#34;:&#34;第二个值。&#34;}

现在,问题在于我已将其部署到测试服务器并创建了一个简单的控制台应用程序以尝试使其工作。这是尝试使用该服务的应用程序。考虑我添加了一个Web引用并将其命名为MyWS,因此命名空间和类具有相同的名称(而不是导致问题的原因):

class Program
    {
        static void Main(string[] args)
        {
            MyWS.MyWS x = new MyWS.MyWS ();
            x.Timeout = 5000;
            try
            {
                x.MyMethod("Hello World", 1);
            }
            catch (Exception ex)
            {
                Console.Write(ex.ToString());
            }
            Console.ReadLine();
        }


    }

当我运行它时,我知道已经到达了Web服务。 &#34;在这里做一些事情&#34; WS中的一部分写入数据库。这样做,没问题,所以问题必定在那之后。

我得到的唯一错误是没有实际意义的代码500。环顾四周我发现它可能是.Flush()方法,所以我删除了那一行,并且Context.Response.BufferOutput应该设置为true。这样做了,没有用。

哦,并且(可能)更糟糕的是,WS将被Android应用程序消耗掉。但首先要做的是:我缺少什么?

1 个答案:

答案 0 :(得分:0)

好吧,事实证明我毕竟找到了自己的解决方案......好吧,还在浏览互联网。这是有效的代码。不要用西班牙语(我居住在墨西哥城的墨西哥人)修改变量名称。顺便说一句,我在西班牙语的论坛中找到了解决方案,因此了解更多您的母语是值得的。 =)它全部在控制台应用程序的Main方法中。

string datos = "";

    string url = "http://server.com/wsDirectory/wsFile.asmx/MethodName?param1=value1&param2=value2";
    string respuesta = "";

    try
    {
        byte[] buffer = Encoding.ASCII.GetBytes(datos);
        System.Net.HttpWebRequest solicitud = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
        solicitud.Method = "GET";
        solicitud.ContentLength = buffer.Length;
        System.Net.HttpWebResponse r = (System.Net.HttpWebResponse)solicitud.GetResponse();
        System.IO.Stream datosRespuesta = r.GetResponseStream();
        System.IO.StreamReader lector = new System.IO.StreamReader(datosRespuesta);
        respuesta = lector.ReadToEnd();
        System.Web.Script.Serialization.JavaScriptSerializer serializador = new System.Web.Script.Serialization.JavaScriptSerializer();
        Dictionary<string, object> resultado = (Dictionary<string, object>)serializador.Deserialize<object>(respuesta);
        Console.Write("Resultado obtenido: " + resultado.ToString());

    }
    catch (Exception ex)
    {
        Console.Write(ex.ToString());
    }
    Console.ReadLine();