2015-04-04 91 views
0

下面的代码抛出WCF的Web.Config - 复制服务名称投掷的错误

命名为相同的密钥“服务”子元素已经存在于相同的配置范围的误差。集合元素在相同的配置范围内必须是唯一的(例如相同的application.config文件)。重复键值:'Marius.Marius_0_0_8'。

现在显然有两个名为Marius.Marius_0_0_8的服务。但是,当我尝试将其中一个名称更改为其他名称时,我得到了一个不同的错误。我假设这是因为该名称必须与.svc中的名称空间&类的名称匹配。

我很累,一直盯着这几个小时。我究竟做错了什么?我所要做的就是打开元数据,以便连接WCF测试客户端。

<?xml version="1.0"?> 

<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 

<configuration> 
    <system.web> 
     <compilation debug="true" strict="false" explicit="true" targetFramework="4.5.1" /> 
     <httpRuntime targetFramework="4.5.1" /> 
     <customErrors mode="Off" /> 
    </system.web> 

    <system.serviceModel> 
     <behaviors> 

      <serviceBehaviors> 
      <behavior name="Marius.PublishTheMetaData" > 
       <!-- Add the following element to your service behavior configuration. --> 
       <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
      </behavior> 
      </serviceBehaviors> 

      <endpointBehaviors> 
       <behavior name="Marius.MariusAspNetAjaxBehavior"> 
        <webHttp/> 
       </behavior> 
      </endpointBehaviors> 

     </behaviors> 
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
      multipleSiteBindingsEnabled="true" /> 
     <services> 
      <service name="Marius.Marius_0_0_8"> 
       <endpoint address="" behaviorConfiguration="Marius.MariusAspNetAjaxBehavior" 
        binding="webHttpBinding" contract="Marius.Marius_0_0_8" /> 

      </service> 

      <service name ="Marius.Marius_0_0_8" behaviorConfiguration="Marius.PublishTheMetaData"> 

      <endpoint name="mex" 
        address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
      </service> 

     </services> 

    </system.serviceModel> 

</configuration> 

回答

0

您正试图为Mex端点声明另一个服务。正确的方法是只有一个暴露两个端点的服务:真正的服务端点和wsdl端点。

<services> 
     <service name="Marius.Marius_0_0_8"> 
      <endpoint address="" behaviorConfiguration="Marius.MariusAspNetAjaxBehavior" 
       binding="webHttpBinding" contract="Marius.Marius_0_0_8" /> 

     <endpoint name="mex" 
       address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
     </service> 

    </services> 

实施例:https://msdn.microsoft.com/en-us/library/ms734786(v=vs.110).aspx