从同一解决方案中引用 Wcf Tcp 服务

Posted

技术标签:

【中文标题】从同一解决方案中引用 Wcf Tcp 服务【英文标题】:Referencing a Wcf Tcp service from within the same solution 【发布时间】:2013-02-12 08:20:00 【问题描述】:

我正在完成演练“如何:在从 Windows 窗体调用 WCF 中将 netTcpBinding 与 Windows 身份验证和传输安全性结合使用”

http://msdn.microsoft.com/en-us/library/ff647180.aspx

当我进入“步骤 7:创建测试客户端应用程序”和子步骤 5:“5.在添加服务引用对话框中,将服务 URI:设置为 net.tcp://localhost:8523/WCFTestService 和然后点击“开始”

我收到“无法识别 URI 前缀。元数据包含无法解析的引用”。

好像“添加服务引用”无法识别“net.tcp”绑定。

我在 Windows 7 x64 上使用 Visual Studio 2012,我的项目面向 x86 和 Framework 4.5。

我找到了这个帖子

An error in the MSDN walk-through - "How to: Host WCF in a Windows Service Using TCP"

但是当客户在同一个解决方案中时,他们没有问题。我是。

服务配置:

    <system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Publisher.MyServiceBehavior">
                <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="POC_WcfTcpSubscribePublishService.Publisher">
            <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
                name="NetTcpBindingEndpoint" contract="POC_WcfTcpSubscribePublishService.IPublisher">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
                name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                    <add baseAddress="net.tcp://localhost:8523/WcfTcpSubscribePublish" />
                </baseAddresses>
            </host>
        </service>
    </services>
</system.serviceModel>

欢迎指点。

【问题讨论】:

您尝试添加引用的服务是否正在运行?我相信这是一个要求 - 您可以从上下文菜单中单独运行服务项目。 抱歉回复晚了。这就是问题所在。我以为我正在运行该服务,但是当我启动它时,它立即因不同的原因而关闭。现在我可以将服务引用添加到客户端项目。有趣,但发现仍然不起作用。 如果您将此回复添加为答案,我会将其标记为已回答。 【参考方案1】:

服务必须正在运行,然后才能添加对它的引用。

您可以从解决方案资源管理器中的上下文菜单单独运行服务项目。

【讨论】:

【参考方案2】:

你有一个服务行为:Publisher.MyServiceBehavior

但是您不会将该服务行为应用于您的服务。在 service name="..." 之后执行此操作:

behaviorConfiguration="Publisher.MyServiceBehavior"

【讨论】:

特雷弗,感谢您的回复。抱歉耽搁了,我被拉到很多方向。这是一个很好的收获,但并没有解决我的问题。当我回复上面的“500 - 内部服务器错误”时,问题是我的服务无法继续运行。现在我可以运行服务了,我可以在客户端中引用它。

以上是关于从同一解决方案中引用 Wcf Tcp 服务的主要内容,如果未能解决你的问题,请参考以下文章

无法从本地机器调用 WCF 服务

添加 WCF 服务引用时,HTTP 请求被客户端身份验证方案“匿名”错误禁止

在 WCF 的添加服务引用中找不到 net.tcp 端点?

WCF 允许仅从 TCP 连接调用方法

在同一目标位置发布 WCF 服务和 Web 应用程序?

添加服务引用仅适用于 localhost wcf 服务