2012-03-17 38 views
0

我有更新從WCF服務代理的問題。我有一個操作合同和一個數據合同接口,一切工作,直到我已經添加一個新的操作合同...當我嘗試更新服務從客戶端應用程序生成的代理沒有新的操作合同。我試過使用svcutil但沒有成功,結果相同。 任何想法有什麼不對?WCF不更新代理

[ServiceContract] 
public interface ICreationService 
{ 
    [OperationContract] bool CreateTicket(Ticket ticket); 
    [OperationContract] bool CreateTicket(Ticket ticket,bool asd); 
    [OperationContract] IEnumerable<Ticket> GetTickets(); 
} 

[DataContract] 
public class Ticket 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public int Severity { get; set; } 

    [DataMember] 
    public string Description { get; set; } 
} 
+1

你可以發佈你添加的新合同,還有你的綁定嗎? – Tung 2012-03-17 09:01:55

+0

[的ServiceContract] \t公共接口ICreationService \t { \t \t [OperationContract的] 布爾CreateTicket(票券); [OperationContract] bool CreateTicket(Ticket ticket,bool asd); // [OperationContract] IEnumerable GetTickets(); \t} [DataContract] 公共類票務 { [數據成員] 公共字符串名稱{;組; } [DataMember] public int Severity {get;組; } [DataMember] public string描述{get;組; } } – user1275513 2012-03-17 11:11:42

+0

爲了讓人們能夠幫助您,您必須向我們展示您的web.config,更新的合同以及您在瀏覽器中瀏覽到該服務時看到的異常 – Tung 2012-03-17 19:29:59

回答

1

WCF不允許你有多個同名的方法(沒有重載)。你需要改變你的CreateTicket方法之一,您可以添加名稱屬性的方法,像這樣的名字:

[OperationContract(Name="CreateTicketNewName")] 
bool CreateTicket(Ticket ticket); 

編輯

嘗試,而不是返回一個具體類型的接口。這裏有類似的線索link

+0

謝謝,即使當我刪除它,方法IEnumerable GetTickets()不會反映在代理... – user1275513 2012-03-17 11:28:43

+0

這種接口是在代理中生成的:[System.CodeDom.Compiler.GeneratedCodeAttribute(「System.ServiceModel」,「4.0.0.0」)] [System.ServiceModel.ServiceContractAttribute(ConfigurationName = 「ServiceReference2.ICreationService」)] 公共接口ICreationService { [System.ServiceModel.OperationContractAttribute(動作= 「http://tempuri.org/ICreationService/CreateTicket」,ReplyAction =」 http://tempuri.org/ICreationService/CreateTicketRe )] bool CreateTicket(Web.ServiceReference2.Ticket ticket); } ...仍然有沒有方法GetTickets()...任何想法?我迷路 – user1275513 2012-03-17 11:32:08

+0

@ user1275513,修改您的GetTickets()返回一個具體的類而不是IEnumerable – Tung 2012-03-17 11:37:20