簡體   English   中英

創建一個WCF Web Api客戶端

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM