2013-10-19 98 views
0

我有一個Wcf服務託管在服務中,然後是一個與tcp連接的mvc客戶端。 得到一切工作正常,直到我更新了服務,現在我不能更新客戶端的參考。更新服務引用時出錯。無法識別URI前綴

這是合同

[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); 
    } 

服務現在第二個經營合同GetRulePaths是更新基準停止工作的時候,我已經添加了一個。如果我刪除PagedData並返回一個列表,那麼它就可以工作。如果我複製PagedData類並更改它的名稱,以便GetRules返回PagedData和GetRulePaths PagingData <>。 (PagedData是一個簡單的類,它將多個項目和數據保存爲可枚舉)。

嘗試更新服務參考時出現錯誤: 無法識別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; } 
    } 

如果我刪除數據成員數據的註釋然後它的工作更新引用。

+0

我喜歡看你的PagedData實現.. –

+0

嗯,不知道你可以通過服務接口公開泛型類型。你期望如何工作? – kroonwijk

+0

我在稍後的編輯中添加了PagedData合約。我瞭解的泛型支持。檢查此:http://msdn.microsoft.com/en-us/library/ms733127.aspx – user1540857

回答

0

您的計算機上是否安裝了「WCF非HTTP激活」?

WCF Non-HTTP Activation

+0

不確定。我放棄了在Visual Studio中使用添加引用。只需手動完成所有操作,然後使用ClientChannelFactory – user1540857

相關問題