2012-03-13 207 views
0

我最近一直在使用WCF Web Api,並且我一直使用內置的WCF Web API測試客戶端來測試我創建的Web服務。創建一個WCF Web Api客戶端

我想在代碼中創建代理而不是運行svcutil.exe來創建代理。

我的web服務工作正常,但是當我使用fiddler檢查發送的消息時,它將命名空間放入xml消息中。

下面是我用來發送請求的代碼。

 RegisterRequest registerRequest = new RegisterRequest 
               { 
                Email = "[email protected]", 
                Firstname = "firstname", 
                Lastname = "lastname", 
                Password = "password" 
               }; 


     var factory = new ChannelFactory<IAccountApi>(new WebHttpBinding(), "http://localhost/WebServices/api/account"); 
     factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
     var proxy = factory.CreateChannel(); 
     proxy.Register(registerRequest); 

該請求下面經由客戶端生成的,並且它出現故障時,返回500內部服務器錯誤

<RegisterRequest xmlns="http://schemas.datacontract.org/2004/07/ServiceModel.Accounts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Email>[email protected]</Email><Firstname>firstname</Firstname><Lastname>lastname</Lastname><Password>password</Password></RegisterRequest> 

使用相同的標頭當我發送使用下列消息通過

該API測試客戶端
<RegisterRequest><Email>[email protected]</Email><Firstname>firstname</Firstname><Lastname>lastname</Lastname><Password>password</Password></RegisterRequest> 

唯一的區別是命名空間已被刪除。

最後的一些點,

1)如果我能清除這個命名空間的要求將工作

2)我不知道,如果可以的ChannelFactory與WCF網絡API一起使用。原因是http://wcf.codeplex.com/releases/view/73423指出「WebService類定義中不再需要[ServiceContract]」,但Channel Factory需要它。

3)所有迄今從WCF的Web API的例子如下所示

HttpClient的客戶端=新的HttpClient();

Contact contact = new Contact() { Name = name }; 
var response = client.Post("http://localhost:9000/api/contacts/", 
    new ObjectContent<Contact>(
     contact, JsonMediaTypeFormatter.DefaultMediaType)); 

我應該爲我的請求使用HttpClient而不是通道工廠?

問候, 安德魯

回答

1

看來,IAccountApi,你不顯示,正在定義的服務合同命名空間。如果你真的想要一個空的命名空間(不是最好的做法)嘗試是這樣的:如果命名空間是不是IAccountApi定義

[ServiceContract(Namespace="")] 
public interface IAccountApi 
{ ... } 

,檢查[DataContract] RegisterRequest的。

+0

嗨理查德,即使與取出它的命名空間它仍然把xmlns:i =「http://www.w3.org/2001/XMLSchema-instance到請求,導致問題。 – Andrew 2012-03-15 23:58:31