如果我指定参数而不是使用配置文件,那么ServiceHost的地址是什么

问题描述 投票:1回答:1

我正在关注这个MSDN方法: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
1个回答
0
投票

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

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

为元数据端点提供服务的完整URL也将起作用

ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior
{
    HttpGetEnabled = true,
    HttpGetUrl = new Uri("http://localhost:8000/WcfGettingStarted/CalculatorService")
}; 
© www.soinside.com 2019 - 2024. All rights reserved.