我正在尝试遵循有关 WCF 的官方基本教程:https ://docs.microsoft.com/en-us/dotnet/framework/wcf/getting-started-tutorial
有一次,在定义服务契约时,教程要求我们输入以下代码:
using System;
using System.ServiceModel;
namespace GettingStartedLib
{
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
}
我对该ServiceContract
属性感到非常困惑,尤其是奇怪的命名空间:http://Microsoft.ServiceModel.Samples
这个命名空间是什么?
我试图搜索 的文档ServiceContractAttribute
,但我仍然无法理解这里发生了什么:
默认情况下,Name 和 Namespace 属性是合约类型的名称和http://tempuri.org,分别,ProtectionLevel 是 ProtectionLevel.None。建议服务契约使用这些属性明确设置它们的名称、命名空间和保护级别。这样做可以实现两个目标。首先,它构建了一个不直接连接到托管类型信息的契约,使您能够重构托管代码和命名空间,而不会破坏以 WSDL 表示的契约。其次,明确要求合约本身具有一定级别的保护,使运行时能够验证绑定配置是否支持该级别的安全性,从而防止不良配置暴露敏感信息。有关保护级别的详细信息,请参阅了解保护级别。
这个命名空间是什么?我应该将此属性设置为什么?任何我喜欢的字符串?任何特定格式的字符串?在决定放什么时我应该考虑什么?
两个示例 (http://Microsoft.ServiceModel.Samples
和http://tempuri.org
) 都建议我应该输入一个 HTTP 地址。但是什么HTTP地址?我是否应该在这个地址下运行一个服务器来做一些有意义的事情?这个服务器应该做什么?因为,基于这些示例和http://tempuri.org
允许的事实(即使不推荐),我知道这个命名空间不应该设置为我的 WCF 服务的地址?(否则,我知道,http://tempuri.org
甚至无法在本地托管的 WCF 服务示例上工作,因为该服务不是托管在 tempuri.org 上,而是托管在 localhost 上!`
什么是http://Microsoft.ServiceModel.Samples
???它甚至是一个有效的 HTTP 地址吗?如果有,采用什么格式?(当我看到http://something
我希望这是一个 IP 地址或域,可以在 DNS 的帮助下解析为 IP 地址,但Microsoft.ServiceModel.Samples
似乎两者都不是)我什至尝试http://Microsoft.ServiceModel.Samples
在我的浏览器中输入,但不足为奇,我刚刚收到错误服务器未找到。
这个命名空间的含义是什么?什么放在那里?