为什么WCF服务代理flie包含http://tempuri.org?

时间:2018-01-25 06:10:36

标签: c# visual-studio wcf svcutil.exe

我正在学习制作基本的WCF服务。该服务在控制台应用程序内运行。客户端也是同一台计算机上的控制台应用程序。我正在使用netTCP绑定。

我使用SvcUtil.exe生成代理类文件,虽然一切正常并且按照我的预期运行,但我对代理类文件部分感到困惑:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="IService1")]
public interface IService1
{

    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService1/myFunction", ReplyAction="http://tempuri.org/IService1/myFunctionResponse")]
    string[] myFunction();

}

什么是http://tempuri.org/IService1/myFunction?对于像我这样的新手来说,这看起来像是一个网址。我不明白程序的这一部分是做什么的以及为什么它是必要的。 svcutil.exe是否在网络上放置了我的程序所需的任何信息?我输了。

1 个答案:

答案 0 :(得分:1)

  

这似乎是一个网址。

这不完全是一个网址。它是一个命名空间。您需要做的就是确保它是独一无二的。

  

我不明白该计划的这一部分是什么以及为什么这是必要的。

命名空间是必需的。它构成了服务行动合同的一部分。

  

svcutil.exe是否在网络上放置了我的程序所需的任何信息?

不,除了您自己的代码之外,您的程序没有任何其他内容。您的程序可以完全脱机运行。

<强>背景

每个Web服务都需要一个唯一的命名空间,以便将其与其他服务区分开来。万维网联盟建议使用URI作为命名空间,因为URI保证是全局唯一的,并且您可能拥有Web服务的域。

Microsoft使用tempuri.org作为使用Visual Studio创建的Web服务的默认值。它代表临时统一资源标识符,Microsoft拥有该域。它仅用于提供占位符,必须替换为开放网络上的服务。

在您的情况下,由于您可能没有该服务的域,您可以使用假域,只需确保它是唯一的。从技术上讲,它可以是任何东西,不一定是URI,但建议使用URI作为一致性。此外,它只需要在您的网络上是唯一的,这就是为什么即使默认的tempuri.org也适合您,但最好尝试提出一个全球唯一的虚假域名。