[英]Creating a WCF Web Api Client
我最近一直在使用WCF Web Api,並且一直在使用內置的WCF Web API測試客戶端來測試我創建的Web服務。
我想在基於接口構建的代碼中創建代理,而不是運行svcutil.exe來創建代理。
我的網絡服務運行良好,但是當我使用提琴手檢查發送的消息時,它會將名稱空間放入xml消息中。
以下是我用來發送請求的代碼。
RegisterRequest registerRequest = new RegisterRequest
{
Email = "test@test.com",
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>test@test.com</Email><Firstname>firstname</Firstname><Lastname>lastname</Lastname><Password>password</Password></RegisterRequest>
當我使用api測試客戶端發送郵件時,使用相同的標頭會傳遞以下消息
<RegisterRequest><Email>test@test.com</Email><Firstname>firstname</Firstname><Lastname>lastname</Lastname><Password>password</Password></RegisterRequest>
唯一的區別是名稱空間已被刪除。
最后幾點
1)如果我能夠刪除此命名空間,則請求將起作用
2)我不確定ChannelFactory是否可以與WCF Web Api一起使用。 原因是http://wcf.codeplex.com/releases/view/73423指出“ Web API類定義不再需要[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代替通道工廠嗎?
問候,安德魯
似乎沒有顯示的IAccountApi正在為服務合同定義名稱空間。 如果您確實想要一個空的名稱空間(不是最佳實踐),請嘗試以下操作:
[ServiceContract(Namespace="")]
public interface IAccountApi
{ ... }
如果未為IAccountApi定義名稱空間,請檢查RegisterRequest的[DataContract]。
我最終使用了HttpClient類,它允許GET,POST,PUT和DELETE,這對於WCF Web API(現在稱為http://www.asp.net/web-api )來說是很好的選擇
http://msdn.microsoft.com/zh-CN/library/system.net.http.httpclient.aspx
至於使用codegen或動態創建rest代理,請參閱本文ReST代理對象生成器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.