C# 更新服务引用时出错。无法识别URI前缀

C# 更新服务引用时出错。无法识别URI前缀,c#,asp.net-mvc,wcf,C#,Asp.net Mvc,Wcf,我有一个托管在服务中的Wcf服务,然后是一个连接tcp的mvc客户端。 在我更新服务之前一切正常,现在我无法更新客户端的引用 这是一份服务合同 [ServiceContract(Name = "Rules", Namespace = "http://api.xxx.com/2013/10/Rules")] public interface IRuleContractV1 { [OperationContract(Name="GetRules")]

我有一个托管在服务中的Wcf服务,然后是一个连接tcp的mvc客户端。 在我更新服务之前一切正常,现在我无法更新客户端的引用

这是一份服务合同

[ServiceContract(Name = "Rules", Namespace = "http://api.xxx.com/2013/10/Rules")]
    public interface IRuleContractV1
    {
        [OperationContract(Name="GetRules")]
        PagedData<RuleDTO> GetRules();

        [OperationContract(Name="GetRulePaths")]
        PagedData<Rule_PathDTO> GetRulePaths(int ruleId);
    }
[ServiceContract(Name=“Rules”,命名空间=”http://api.xxx.com/2013/10/Rules")]
公共接口IRuleContractV1
{
[运营合同(Name=“GetRules”)]
pageddatagetrules();
[OperationContract(Name=“GetRulePath”)]
PagedData GetRulePath(int-ruleId);
}
现在,第二个操作契约GetRulePaths是我在更新引用停止工作时添加的。如果我删除PagedData并返回一个列表,那么它就工作了。如果复制PagedData类并更改其名称,则GetRules将返回PagedData和GetRulePaths PagingData。(PagedData是一个简单的类,它以ienumerable的形式保存项目和数据的总数)

尝试更新服务引用时出现的错误是: 无法识别URI前缀。 元数据包含无法解析的引用:'net。tcp://localhost:8002/SSAPI/mex'. 元数据包含无法解析的引用:'net。tcp://localhost:8002/SSAPI/mex"

以下是AppConfig wcf配置

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
...
<services>
<service name="SSService.Wcf.AdminService">
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="tcpMexBinding"
          name="mexAdminApi" contract="IMetadataExchange" />
        <endpoint address="Rules" binding="netTcpBinding" bindingConfiguration="tcpSecureBinding"
          contract="SS.Wcf.Admin.Contracts.IRuleContractV1" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8002/SSAPI" />
            <add baseAddress="http://localhost:8003/SSAPI" />
          </baseAddresses>
        </host>
      </service>
    </services>
...
<bindings>
<netTcpBinding>
        <binding name="tcpSecureBinding">
          <security mode="Transport">
            <message algorithmSuite="Basic256Sha256Rsa15" />
          </security>
        </binding>
      </netTcpBinding>
      <mexTcpBinding>
        <binding name="tcpMexBinding" />
      </mexTcpBinding>
    </bindings>

...
...

找到了原因,但不确定为什么会发生这种情况。我的PagedData类如下所示:

[System.Runtime.Serialization.DataContract(Name = "PagedData", Namespace = "http://api.xxx.com/2013/10/types")]
    public class PagedData<T> where T : class
    {
        /// <summary>
        /// Container with the actual data that is paged.
        /// </summary>
        [System.Runtime.Serialization.DataMember(Name = "Data")]
        public List<T> Data { get; set; }

        /// <summary>
        /// Total number of items. 
        /// </summary>
        [System.Runtime.Serialization.DataMember(Name = "TotalItems")]
        public long TotalItems { get; set; }
    }
[System.Runtime.Serialization.DataContract(Name=“PagedData”,命名空间=”http://api.xxx.com/2013/10/types")]
公共类页面数据,其中T:class
{
/// 
///包含分页的实际数据的容器。
/// 
[System.Runtime.Serialization.DataMember(Name=“Data”)]
公共列表数据{get;set;}
/// 
///项目总数。
/// 
[System.Runtime.Serialization.DataMember(Name=“TotalItems”)]
公共长TotalItems{get;set;}
}
如果我删除了数据成员数据的注释,那么它可以更新引用。

您的计算机上是否安装了“WCF非HTTP激活”


我想看看您的PagedData实现..hmm,我不知道您可以通过服务接口公开泛型类型。你们希望它如何工作?我在以后的编辑中添加了PagedData合同。据我所知,支持泛型。检查这一点:即使在这里阅读序列化时,它也表示支持genric类型。这一点毫无意义。将其更改为返回一个列表,而不带out参数total count。现在可以了,不确定。我已经放弃在VisualStudio中使用add引用。只需手动执行所有操作,并使用ClientChannelFactory即可