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

时间:2018-08-02 12:14:42

标签: c# wcf

我正在遵循此MSDN操作方法:host and run a basic windows WCF service

在本章中,通过提供参数而不是从配置文件中读取值来托管服务。

这可能不是我要使用的方案,我只是想了解会发生什么情况。

我的问题:服务正在运行,但在浏览器中看不到。

以前的步骤:  -Visual Studio 2017,最新.NET,C#v。7.0  -创建了新的解决方案;添加了新项目:WCF库  -结果:一个带有3个源文件的DLL:1个与Service Contract的接口,此接口的一个实现和一个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”(此页面不起作用?)。与服务未运行或尝试使用其他地址时所用的文本不同。

问题:这是否意味着我有正确的地址?我应该期待:此页面无法正常工作吗?

1 个答案:

答案 0 :(得分:0)

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

您应该能够在http://localhost:8000/WcfGettingStarted/

的浏览器中访问元数据终结点。

为Metadata终结点提供服务的完整网址也将起作用

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