【问题标题】:Why does WCF service proxy flie contain http://tempuri.org?为什么 WCF 服务代理飞包含 http://tempuri.org?
【发布时间】:2018-07-04 08:02:03
【问题描述】:

我正在学习制作基本的 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 是否在网络上放置了我的程序所需的任何信息?我迷路了。

【问题讨论】:

  • 这仅用于开发。您应该在生产中使用您的实际域名。即使是开发,如果你已经有一个域名,那就使用它。
  • @RacilHilan 谢谢,也许我遗漏了一些东西,但这永远不会是通过互联网访问的服务。它将始终是桌面应用程序与同一台计算机上的桌面应用程序通信。
  • 查看OperationContractAttribute.Action文档的备注部分... msdn.microsoft.com/en-us/library/…

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


【解决方案1】:

这似乎是一个网址。

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

我不明白这部分程序在做什么以及为什么需要它。

命名空间是必需的。它构成您的服务操作合同的一部分。

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

不,除了您自己的代码之外,您的程序中没有任何内容。您的程序可以完全离线运行。

背景

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

Microsoft 使用 tempuri.org 作为使用 Visual Studio 创建的 Web 服务的默认值。它代表 Temporary Uniform Resource Identifier,微软拥有该域。它只是为了提供一个占位符,并且必须被替换,特别是对于开放网络上的服务。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多