【问题标题】:What's the difference between "Add reference" and "Add service reference"?“添加引用”和“添加服务引用”有什么区别?
【发布时间】:2013-03-12 09:22:23
【问题描述】:

我有一个C#/WCF 服务。我是 having problems 向它添加服务引用,所以我的一位同事建议我使用库简单地添加对它的引用。

第二个答案here 表明这样做会失去服务的可重用性。
那是对的吗?这些选项之间还有其他区别吗?

编辑
我没有使用 WCF 的经验。我根据this 教程工作,请在您的答案中提供一些解释(或链接)。

编辑 2
我想要一个 Windows 托管的 WCF 服务,该服务将在运行我的主应用程序的每台机器上运行。我的应用程序(和另一个应用程序)将仅在本地使用此服务。
我仍然可以通过“添加参考”实现这一目标吗?

编辑 3
我需要一项服务,因为我有两个不同的应用程序正在做同样的事情,并且它们需要硬件资源。目前,其中一个正在使用另一个的 dll,因此代码不会被复制和粘贴(至少),但是没有办法阻止对这些资源的并发访问。 Windows 服务可以解决这个问题。
绑定不是太重要。我将进一步了解命名管道。

【问题讨论】:

    标签: wcf visual-studio service-reference


    【解决方案1】:

    Add reference是添加对dll、exe等的引用

    Add service reference为某些服务创建代理类

    【讨论】:

    • 我明白这一点,但我仍然可以通过它的接口访问我的服务,如果它们是在单独的 dll 中定义的,不是吗?
    【解决方案2】:

    添加引用用于消费项目中的dll或exe文件,而添加服务引用用于添加消费服务。添加服务引用将创建代理 在项目中

    【讨论】:

      【解决方案3】:

      您的主应用程序在每台客户端计算机上运行,​​而您的 WCF 服务在服务器上运行。您不会在每个客户端上都运行 WCF 服务,这是没有意义的。

      所以你通常会:

      • 创建客户端应用程序
      • 创建 WCF 服务
      • 将服务引用从您的客户端应用程序添加到您的 WCF 服务

      部署:

      • 将您的客户端应用程序部署到每台想要使用它的客户端计算机上
      • 将您的 WCF 服务部署到一台或多台服务器计算机上

      【讨论】:

      • 为什么它没有意义。 NamedPipe 绑定怎么样? stackoverflow.com/questions/7353670/…
      • 您在哪里看到 TS 需要命名管道?
      • “我想要一个 Windows 托管的 WCF 服务,该服务将在运行我的主应用程序的每台机器上运行。我的应用程序(和另一个应用程序)将仅在本地使用此服务” - 它不适合命名管道?
      • 由于 TS 在这方面可能是新的(“添加引用”和“添加服务引用”之间的区别?)我认为我们必须挑战这个解决方案,因为这似乎是一件奇怪的事情.或许TS应该先说明他真正想做的事情。
      • 我同意,信息很少。但从 TS 写的内容来看,如果她决定在她的本地服务上使用 WCF,这可能是可行的方法。
      【解决方案4】:

      当您使用添加服务引用时,Visual Studio 使用 svcutil.exe 创建客户端代理(以及另外的 web.config 或 app.config 文件) - 特殊类,用于描述服务器端的方法(服务合同)。当你知道这个合约并且你有适当的配置时 - 你可以从服务器服务远程调用这些方法。

      当您使用添加引用时 - 您只需添加一个新库,您可以使用它来处理在那里实现的类、接口、方法。如果您在 dll 中有服务合同类,则可以使用它,而不是使用 svcutil.exe 创建它。但是你必须配置它的设置(绑定和地址)

      编辑 1 创建 WFC 服务的示例有很多。请参阅http://www.codeproject.com/Articles/42643/Creating-and-Consuming-Your-First-WCF-Servicehttp://www.codeproject.com/Articles/412363/How-to-Use-a-WCF-Service-without-Adding-a-Service。和你想要的解释?您只需要制作合同(您使用方法进行分类),将其链接到您的客户端和服务器应用程序并定义正确的绑定,它描述了如何在它们之间向您发送合同数据

      编辑 2 在不知道应用程序目的的情况下,很难说必须使用什么。因此,是的,您可以使用本地 Windows 服务在那里托管 wcf 服务。存在一种特殊类型的 WCF 服务,称为 NamedPipe - 本地托管服务。描述见http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx,实现见http://msdn.microsoft.com/en-us/library/ms733069.aspx

      【讨论】:

        猜你喜欢
        • 2011-10-13
        • 2019-09-06
        • 2015-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2011-10-08
        相关资源
        最近更新 更多