【问题标题】:call webservice(asmx) Using POST method使用 POST 方法调用 webservice(asmx)
【发布时间】:2018-06-28 12:35:15
【问题描述】:

嗨,我想在 c# 中从桌面应用程序调用我的 Web 应用程序的 Web 服务,我已经尝试过,但它给出了错误内部服务器错误 500。我的 Web 服务 URL 太长,所以我需要使用 POST 方法传递它。 我的代码中有什么不对?请有任何建议。

 private void button1_Click(object sender, EventArgs e)
        {
            //HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL OF Webservice");
            //WebResponse response = request.GetResponse();
            //response.Close();

            using (var wb = new WebClient())
            {

                var data = new NameValueCollection();
                data["authU"] = "value";
                data["authP"] = "value";
                data["cmp"] = "value";
                data["sales_id"] = "value";
                data["Login"] = "value";
                data["total_amount"] = "value";
                data["total_discount"] = "value";
                data["net_amount"] = "value";
                data["change"] = "value";
                data["tax"] = "value";
                data["ip"] = "value";
                data["Tran_Type"] = "value";
                data["mac_id"] = "value";
                data["ref_id"] = "value";
                data["venue_id"] = "value";
                data["store_name"] = "value";
                data["actual_total_amount"] = "value";
                data["temp_sale_id"] = "value";
                data["is_return"] = "value";
                data["created_date"] = "2018-06-14 14:26:09";
                data["modify_date"] = "2018-06-14 14:26:09";
                data["mode"] = "value";
                data["value"] = "value";
                data["machine_id"] = "value";
                data["location_id"] = "value";
                data["input_amount"] = "value";
                data["sale_type"] = "value";
                data["is_table"] = "value";
                data["Payment_Date"] = "2018-06-14 14:26:09";
                data["Payment_Amount"] = "value";
                data["Table_name"] = "value";
                data["is_close"] = "value";
                data["values"] = "value";

                var response = wb.UploadValues("http://localhost:53653/POS_WebService.asmx/Sales_Master_Full", "POST", data);
                string responseInString = Encoding.UTF8.GetString(response);

【问题讨论】:

    标签: c# web-services http


    【解决方案1】:

    将数据发布到 Web 服务并不是与它们交互的标准方式。您指向 WSDL 的副本,在本例中,位于:

    http://localhost:53653/POS_WebService.asmx?WSDL
    

    并让 VS 创建一个代理包装器来调用函数。

    请参阅https://stackoverflow.com/a/12710348/656243 了解如何添加引用。从那里开始,假设您将引用添加为 WebService1,您可以将函数作为 Web 服务的成员调用:

    WebService1 svc = new Webservice1;
    var data = svc.Sales_Master_Full();
    

    就好像它是一个普通的 C# 函数一样。

    【讨论】:

    • 所以我需要在此参考或特定 web 服务 (sales_master_full) 参考中提供 .asmx 文件参考?
    • 您是否在我的答案中间点击了该链接,并提供了有关如何添加 Web 服务的明确步骤?在该过程中,系统会提示您输入 URL,在您的情况下为:localhost:53653/POS_WebService.asmx?WSDL
    • 我添加了参考仍然得到相同的错误'远程服务器返回错误:(500)内部服务器错误。'
    • no get error only 远程服务器返回错误:(500)内部服务器错误。远程服务器返回错误:(500)内部服务器错误。这个错误
    • 我会联系 web 服务的开发人员,试图了解他们的代码为什么会出错。要么是因为您将参数传递给服务不理解的函数,要么是因为他们的代码有错误。
    【解决方案2】:

    您需要如下设置HTTP Content type header:

    using (var wb = new WebClient())
    {
        wb.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    
        var data = new NameValueCollection();
        // ...
        var response = wb.UploadValues("http://localhost:53653/POS_WebService.asmx/Sales_Master_Full", "POST", data);
        // ...
    }
    

    【讨论】:

    • 我也试过了,但只得到错误'远程服务器返回错误:(500)内部服务器错误。'
    • 检查服务器上的错误,看看出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多