WCF .svc工作但不是配置文件

时间:2011-05-23 16:27:38

标签: c# wcf .net-4.0

我正在尝试使用配置文件来定义端点和服务信息。我有一个非常简单的代码,包含OneWay服务和双工服务。当我没有尝试更改配置文件时,OneWay工作。

现在,我想使用配置文件来定义两个服务。

Service1合同名称为IOneWayService,Service2合同名称为ICallBackService

两者都在其具体的相应类名OneWayService.svc.csCallBackService.svc.cs中实现了代码。

此时的配置文件如下所示:

<configuration>
   <system.web>
      <compilation debug="true" targetFramework="4.0" />
   </system.web>
   <system.serviceModel>
      <serviceHostingEnvironment  multipleSiteBindingsEnabled="true">
         <serviceActivations>
            <add relativeAddress="OneWayService.svc" service="TestingWcf.OneWayService"/>
            <add relativeAddress="CallBackService.svc" service="TestingWcf.CallBackService"/>
         </serviceActivations>
      </serviceHostingEnvironment>
      <services>
         <service name="TestingWcf.OneWayService">
            <endpoint address="http://localhost:60847/One"
              binding="wsHttpBinding"
              contract="IOneWayService" />
         </service>
         <service name="TestingWcf.CallBackService">
            <endpoint address="http://localhost:60847/Two"
               binding="wsHttpBinding"
               contract="IDuplexService" />
         </service>
      </services>
      <behaviors>
         <serviceBehaviors>
            <behavior>
               <serviceMetadata httpGetEnabled="true"/>
               <serviceDebug includeExceptionDetailInFaults="false"/>
            </behavior>
         </serviceBehaviors>
      </behaviors>
   </system.serviceModel>
   <system.webServer>
      <modules runAllManagedModulesForAllRequests="true"/>
   </system.webServer>
</configuration>

尝试通过此网址执行OneWayService时,我始终遇到此错误:http://localhost:60847/OneWayService.svc

  

合约名称'IOneWayService'   无法在列表中找到   服务实施的合同   'OneWayService'。

有人知道为什么吗?

修改

我已从multipleSiteBindingsEnabled= true标记中删除了servinceHostingEnvironment,并在合同中添加了命名空间,我可以使用OneWayService。

此外,双工无法绑定到wsHttpBinding。我不得不将其更改为NetTcpBinding。但是,我在Duplex中遇到了另一个错误:

  

配置绑定扩展   'system.serviceModel /绑定/ NetTcpBinding的'   无法找到。验证这一点   绑定扩展是正确的   在。注册   system.serviceModel /扩展/ bindingExtensions   并且它拼写正确。

从这一刻起,我又迷失了。

编辑2

我在绑定名称中输入了一个错误。我有一个NetTcpBinding的大写字母,它需要一个小写:netTcpBinding。但是,它仍然没有用,现在我有:

  

协议'net.tcp'不是   支持的。 &GT;。&LT; !!!

1 个答案:

答案 0 :(得分:1)

好的,这解释了它 - 默认情况下Visual Studio使用内置的Cassini Web服务器(除非您已经切换到使用IIS Express) - 并且该服务器除了普通的http之外不支持任何内容。 / p>

Cassini不支持net.tcp等等。

您需要开始使用单独的IIS虚拟目录,并首先启用所有必要的支持内容(在“添加/删除Windows功能”对话框中)