c# - 如果我指定参数而不是使用配置文件,ServiceHost 的地址是什么
问题描述
我正在关注这个 MSDN How-To: host and run a basic windows WCF service
在本章中,服务是通过提供参数而不是从配置文件中读取值来托管的。
这可能不是我将使用的场景,我只是想了解会发生什么。
我的问题:服务运行,但我在浏览器中看不到它。
以前的步骤: - Visual Studio 2017,最新的 .NET,C# v. 7.0 - 创建新的解决方案;添加了新项目:WCF 库 - 结果:一个带有 3 个源文件的 DLL:1 个与服务合同的接口,该接口的一个实现和一个 app.config - 调试 dll 时使用此 app.config - 我将接口更改为添加一些计算器功能:加/减/乘/除
在这一步中,我将服务托管为控制台应用程序。为此,需要以管理员身份运行 Visual Studio。
将控制台应用程序添加到解决方案,并添加以下代码。为简单起见,我删除了异常处理。
static void Main(string[] args)
{
// Step 1 Create a URI to serve as the base address.
Uri baseAddress = new Uri("http://localhost:8000/WcfGettingStarted/");
// Step 2 Create a ServiceHost instance
using (ServiceHost myHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
// Step 3 Add a service endpoint.
var addedServiceEndPoint = myHost.AddServiceEndpoint(
typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
// Step 4 Enable metadata exchange.
ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior
{
HttpGetEnabled = true,
};
myHost.Description.Behaviors.Add(serviceMetaDataBehaviour);
// Step 5 Start the service.
myHost.Open();
Console.WriteLine("The service is running.");
Console.WriteLine("Press any key to terminate service.");
Console.ReadKey();
// Close the ServiceHostBase to shutdown the service.
myHost.Close();
}
}
现在,如果您阅读此代码,计算器服务的地址是什么?
根据“操作方法”,它应该是:
http://localhost:8000/WcfGettingStarted/CalculatorService
然而,如果我在浏览器中添加这个地址(在我启动调试器之后),它会显示(用我的语言)“Deze pagina werkt niet”(这个页面不起作用?)。与服务未运行或我尝试不同地址时的文本不同。
问题:这是否意味着我有正确的地址?我应该期待:这个页面不起作用吗?
解决方案
您正在创建一个以 baseAddress 作为 Uri 的 ServiceHost,然后将 serviceMetaDataBehaviour 添加到 ServiceHost。服务端点和元数据端点之间没有链接。
您应该能够在浏览器中访问http://localhost:8000/WcfGettingStarted/上的元数据端点
为元数据端点提供服务的完整 url 也可以
ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior
{
HttpGetEnabled = true,
HttpGetUrl = new Uri("http://localhost:8000/WcfGettingStarted/CalculatorService")
};
推荐阅读
- html - 消息值未显示在 Outlook、html 和打字稿中
- jasmine - 如何多次运行相同的规范?
- reactjs - react-navigation 5.x:TS2345:“...”类型的参数不可分配给“...”类型的参数
- node.js - 嵌套 MongoDB 文档问题(Mongoose 和 Node Js)
- c - 如何检查递归二项式系数算法是否溢出
- refactoring - 将 ST 计算移至子计算
- python - 从 Python 连接到远程桌面上的 MS SQL Server
- c++ - std::vector 未调整大小以在一定数量的条目后容纳更多条目 C++
- angular - Angular 2+ navigation with mat-tab-nav-bar - accessibility
- c# - Blazor 服务器如何在后端工作?