我有一個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; }
}
如果我刪除數據成員數據的註釋然後它的工作更新引用。
我喜歡看你的PagedData實現.. –
嗯,不知道你可以通過服務接口公開泛型類型。你期望如何工作? – kroonwijk
我在稍後的編輯中添加了PagedData合約。我瞭解的泛型支持。檢查此:http://msdn.microsoft.com/en-us/library/ms733127.aspx – user1540857