我最近一直在使用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而不是通道工廠?
問候, 安德魯
嗨理查德,即使與取出它的命名空間它仍然把xmlns:i =「http://www.w3.org/2001/XMLSchema-instance到請求,導致問題。 – Andrew 2012-03-15 23:58:31