提问人:Ali Kocak 提问时间:7/4/2023 最后编辑:Ali Kocak 更新时间:7/4/2023 访问量:100
如何从 .net 控制台应用程序使用本地 asmx Web 服务
How to consume local asmx web service from .net console application
问:
我正在尝试学习 Web 服务。我从基本模板 .asmx 开始。然后,我创建了一个 .net 控制台应用程序,并添加了对此应用的 Web 引用。它看起来工作正常。但是我不知道如何在控制台中调用此服务并使用其方法。
SoapDemo.asmx.cs :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace soapdemo
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public int SumOfNums(int FirstNumber, int SecondNumber)
{
return FirstNumber + SecondNumber;
}
[WebMethod(MessageName = "SumOfFloats")]
public float SumOfNums(float FirstNumber, float SecondNumber)
{
return FirstNumber + SecondNumber;
}
}
}
程序.cs :
using SoapDemo;
namespace ConsoleClient3
{
internal class Program
{
static void Main(string[] args)
{
WebService1SoapClient client = new WebService1SoapClient();
//var add = client.HelloWorldAsync();
//Console.WriteLine(add);
//Console.ReadLine();
}
}
}
连接服务控制台应用:
答:
1赞
Kiran Shahi
7/4/2023
#1
我希望您已将项目中的服务引用添加到客户端应用程序中。如果没有,请按照以下步骤进行添加。
- 右键单击客户端项目。
- 选择“添加”
- 选择服务引用。(将出现“添加服务引用”对话框。
- 选择“WCF Web 服务”,然后单击“下一步”。
- 在 URI 输入中添加服务的 URI,然后单击下一步。
- 单击“下一步”
- 单击“完成”
这样,您就已将对服务的引用添加到客户端控制台应用程序。
将服务引用添加到客户端应用后,可以访问服务的 HelloWorld 方法,如下所示:
using ServiceReference1;
namespace ConsoleClient3
{
internal class Program
{
static void Main(string[] args)
{
WebService1SoapClient client = new(WebService1SoapClient.EndpointConfiguration.WebService1Soap);
HelloWorldResponse result = client.HelloWorldAsync().Result;
//var add = client.HelloWorldAsync();
Console.WriteLine(result.Body.HelloWorldResult);
//Console.ReadLine();
}
}
}
您得到的 hello world 结果为 。检查响应类型并生成该对象。HelloWorldResponse
同样,要调用方法,请遵循以下示例SumOfNums
using ServiceReference1;
namespace ConsoleClient3
{
internal class Program
{
static void Main(string[] args)
{
WebService1SoapClient client = new(WebService1SoapClient.EndpointConfiguration.WebService1Soap);
int result = client.SumOfNumsAsync(1, 2).Result;
Console.WriteLine(result);
}
}
}
这里,返回类型是 int,因此您可以直接将其打印为结果。
作为参考,asmx Web 服务代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace WebApplication1
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public int SumOfNums(int FirstNumber, int SecondNumber)
{
return FirstNumber + SecondNumber;
}
}
}
上述代码和操作在 Visual Studio Enterprise 2022 上执行。ASMX Web 服务项目位于 .NET Framework 4.7.2 上,控制台应用程序位于 .NET 7.0 上
评论
0赞
Ali Kocak
7/4/2023
当我写“WebService1SoapClient client = new WebService1SoapClient();
0赞
Ali Kocak
7/4/2023
它没有看到 HelloWorld 方法只得到 HellowWorldAsync,当我打印出来时,我得到“System.Threading.Tasks.Task'1[SoapDemoReference.HelloWorldResponse]”
0赞
Ali Kocak
7/4/2023
它在连接 Web 服务时自动发生。它位于 EndpointConfiguration 下。我正在更新屏幕截图,该屏幕截图在屏幕截图中不完全可见。
0赞
Ali Kocak
7/4/2023
WebService1SoapClient 客户端 = new(new BasicHttpBinding(BasicHttpSecurityMode.None), new EndpointAddress(“localhost:44380/WebService1.asmx”));当我使用它时,它会给出一个 https http 错误。我有 WebService1SoapClient client = new WebService1SoapClient(WebService1SoapClient.EndpointConfiguration.WebService1Soap);所以我用了这个。然后,当我运行应用程序时,它返回了 HelloWorldResponse,但没有返回它应该编写的 hello world。
1赞
Kiran Shahi
7/4/2023
@AliKocak我已经更新了它:)
评论