首页 > 解决方案 > 如果我指定参数而不是使用配置文件,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”(这个页面不起作用?)。与服务未运行或我尝试不同地址时的文本不同。

问题:这是否意味着我有正确的地址?我应该期待:这个页面不起作用吗?

标签: c#wcf

解决方案


您正在创建一个以 baseAddress 作为 Uri 的 ServiceHost,然后将 serviceMetaDataBehaviour 添加到 ServiceHost。服务端点和元数据端点之间没有链接。

您应该能够在浏览器中访问http://localhost:8000/WcfGettingStarted/上的元数据端点

为元数据端点提供服务的完整 url 也可以

ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior
{
    HttpGetEnabled = true,
    HttpGetUrl = new Uri("http://localhost:8000/WcfGettingStarted/CalculatorService")
}; 

推荐阅读