我正在关注这个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”(此页面不起作用?)。它与服务未运行或我尝试使用其他地址的文本不同。
问题:这是否意味着我的地址正确?我应该期待:这个页面不起作用?
您正在使用baseAddress创建一个ServiceHost作为Uri,然后将serviceMetaDataBehaviour添加到ServiceHost。服务端点和元数据端点之间没有链接。
您应该能够在http://localhost:8000/WcfGettingStarted/上浏览浏览器中的元数据端点
为元数据端点提供服务的完整URL也将起作用
ServiceMetadataBehavior serviceMetaDataBehaviour = new ServiceMetadataBehavior
{
HttpGetEnabled = true,
HttpGetUrl = new Uri("http://localhost:8000/WcfGettingStarted/CalculatorService")
};