WCF端点&绑定配置问题

时间:2011-02-28 21:39:53

标签: asp.net wcf configuration binding service

我在这里遇到一个非常奇怪的问题。为简单起见,我创建了一个项目,其唯一目的是在更大的应用程序框架之外测试问题,但仍然遇到Visual Studio 2010中的WCF中的错误或与我的WCF新手技能集相关的错误:)

问题在于:

我创建了一个在名为“SimpleMethod”的MVC3项目中运行的WCF端点。该方法在应用程序根目录下的.svc文件中运行,并返回一个bool。

使用“WCF服务配置编辑器”我已将端点添加到我的Web.Config以及一个名为“LargeImageBinding”的文件。

这是服务:

    [OperationContract]
    public bool SimpleMethod()
    {
        return true;
    }

Config Tool生成的Web.Config:

<system.serviceModel>
<bindings>
  <wsHttpBinding>
    <binding name="LargeImageBinding" closeTimeout="00:10:00" />
  </wsHttpBinding>
</bindings>
<services>
  <service name="WCFEndpoints.ServiceTestOne">
    <endpoint address="/ServiceTestOne.svc" binding="wsHttpBinding"
      bindingConfiguration="LargeImageBinding" contract="WCFEndpoints.IServiceTestOne" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

服务呈现正常,您可以在导航到http://localhost:57364/ServiceTestOne.svc时看到端点 - 现在,当我创建一个单独的项目来使用服务时会出现问题。我将一个服务引用添加到上面项目的运行实例中,将其指向:http://localhost:57364/ServiceTestOne.svc

这是奇怪的部分。该服务自动生成就好了但在Web.Config中生成的端点如下所示:

<client>
  <endpoint address="http://localhost:57364/ServiceTestOne.svc/ServiceTestOne.svc"
    binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IServiceTestOne"
    contract="ServiceTestOne.IServiceTestOne" name="WSHttpBinding_IServiceTestOne">

正如您所看到的,它会两次列出地址的“ServiceTestOne.svc”部分!

当我调用该服务时,我收到以下错误:

远程服务器返回错误:(404)Not Found。

我尝试在上面的配置中删除端点地址末尾的额外“/ServiceTestOne.svc”,我得到了同样的错误。

现在,如果我回到WCF应用程序并删除Web.Config中的自定义端点和绑定引用(“services”和“bindings”标记中的所有内容),那么它的工作原理是什么呢?然后返回到使用者应用程序,更新对服务的引用并调用SimpleMethod().... BOOM的工作方式就像一个魅力,我将bool设置为true。

问题是,我需要进行自定义绑定配置,以便允许访问默认值之外的服务,而且据我所知,任何创建自定义绑定的尝试都会使端点运行正常,但是在进行实际的方法调用时失败。

任何人都可以看到我将它放在一起的任何缺陷吗?感谢您抽出宝贵的时间 - 我已经在这个圈子里跑了大约一个星期!

1 个答案:

答案 0 :(得分:2)

在IIS中托管WCF服务时,使用以下格式形成服务的基本地址:{protocol}:// {host}:{port} / {applicationName} / {svcFileName}。这是您可以浏览以获取WCF帮助页面和/或元数据的地址(在默认配置中)。

要形成端点的实际地址(客户端需要使用的地址),使用以下格式:{serviceBaseAddress} / {endpointAddress}

比较上面的格式和您提供的示例配置解释了您在客户端地址中获取ServiceTestOne.svc两次的原因。

如果您希望服务的地址为http://localhost:57364/ServiceTestOne.svc,我建议您在端点配置中保留地址属性为空:

<endpoint address="" ... />