0

我有一个由两个项目组成的 WCF 服务:

  1. WCF 服务库
  2. WCF Web 应用程序

第一个项目有一个由 MyService 实现的服务调用 IMyService。它是通过使用 WS 绑定配置的,如果我在这个项目上按 F5,WCFTestClient 会呈现 WS 绑定。在 Web 应用程序中,我有一个带有同名标记的 .svc 文件

 <%@ ServiceHost Language="C#" Debug="true" Service="[Namespace].MyService" %>

如果我在这个项目上按 F5,它会呈现一个 BasicHttpBinding。在客户端中也是如此。为什么?

4

3 回答 3

2

我刚刚检查了 WCF 服务库项目默认创建 app.config 并WSHttpBinding用于默认服务。当您运行 WCFTestClient 时,它始终使用此本地配置。如果您想使用 WCFTestClient 测试其他服务,您必须将它们的配置添加到此配置中。此配置永远不会用于其他任何事情。

WCF 服务应用程序使用 web.config。在 WCF 4.0 中,它使用简化的配置,根据一些预定义的条件添加端点。默认情况下,它将BasicHttpBinding端点添加到通过 HTTP 公开的所有服务中,使用 common ServiceHostFactory

于 2011-01-17T22:12:08.067 回答
0

你的配置文件是怎么配置的?如果您将端点配置为使用 wshttpbinding,则应该使用该端点。

您介意在此处添加一些代码(包括配置文件中的绑定和端点详细信息),以便我们看一下吗?

谢谢,罗伯托·洛佩斯。

于 2011-01-17T22:00:18.007 回答
0

我认为最初的问题提出的非常糟糕,要获得令人满意的答案,您需要清楚地说明所有细节。

首先,您使用的是哪个版本的 Visual Studio?由于什么都没说,我假设它是带有 SP1 的最新版本 VS2010。

假设您有一个包含两个项目的 Visual Studio 解决方案,一个是 WCF 服务库,另一个是 WCF 应用程序,两者都是使用默认项目模板创建的,无需任何手动调整。

  • WCF 服务库将有一个 app.config 文件,其中包含以下行:

简而言之,Visual Studio 2010 (SP1) 默认将 wsHttpBinding 用于 WCF 服务库项目。

  • 但是,WCF 服务应用程序项目将有一个不包含显式终结点定义的 web.config 文件,在这种情况下,使用的默认终结点绑定是 basicHttpBinding。

OP 说“当我在这个项目上按 F5 时……”,这是一个非常具有误导性的陈述。“在项目上按 F5”是什么意思?您的意思是您在解决方案树中选择了项目节点,然后按 F5?如果是这种情况,发生的情况将始终取决于解决方案中将哪个项目设置为启动项目(而不是当前在 Visual Studio UI 中选择了哪个项目节点)。

如果 WCF Service Application 项目是启动项目,按 F5 不会导致 WCF 测试客户端运行,而是会导致项目的文件夹显示在 IE 中。

如果 WCF 服务库项目是启动项目,则会运行 WCF 测试客户端,这只是因为在项目属性窗口的调试部分,启动选项默认如下: /client:"WcfTestClient 。可执行程序”

于 2011-11-25T04:20:58.653 回答