簡體   English   中英

如何從客戶端讀取StreamReader響應?

[英]How to read the StreamReader response from Client?

我是REST Web服務的新手。 我需要在C#控制台應用程序中使用現有的REST服務。 我在下一行中得到XML響應。

readStream.ReadLine();

我們如何在客戶端中利用REST響應?

效用

  public void SearchContactDetailsAsync(Models.AddressBookRequest addressBookDataRequest)
    {
        UriBuilder builder = new UriBuilder(url);
        restClient.DoPost(builder.Uri, Serializer.SerializeXml(addressBookDataRequest.contactsSearchCriteria), SearchContactSuccess, SearchContactFailed, addressBookDataRequest.HeaderParams);
    }

    private void SearchContactSuccess(HttpWebResponse response)
    {
        //Call base service method - to inspect the response and publish an event
        HandleServiceSearchSuccess<ContactDetailsPreview[]>(SearchContactDetailsCompleted, "contactDetailsPreviews", response);
        Stream receiveStream = response.GetResponseStream();
        Encoding encode = System.Text.Encoding.UTF8;

        StreamReader readStream = new StreamReader(receiveStream, encode);
        readStream.ReadLine();

    }

控制台應用

    public void MyMethod()
    {
        autoRestEvent = new AutoResetEvent(false);
        services = new communicationSvcs();
        services.SearchContactDetailsCompleted += new EventHandler<RestClientUtility.EventArg.ServiceResponseEventArgs<RestClientUtility.Models.ContactDetailsPreview[]>>(services_SearchContactDetailsCompleted);

        //Call the operation
        AddressBookRequest req = new AddressBookRequest
        {
            contactsSearchCriteria = new ContactsSearchCriteria
            {
                searchUserID = "ss23ed"

            },
            HeaderParams = new RestClientUtility.Requests.HttpHeaderParms
            {
                UserId = "ss23ed",
                UserPrincipalName = " ss23ed@hotmail.com",
                ContentType = "application/xml"
            }
        };
        services.SearchContactDetailsAsync(req);
        autoRestEvent.WaitOne();

    }

參考文獻

  1. XML反序列化通用方法

.NET的XmlDocument類具有一個Load()方法,該方法接受流

如我所見,您只需要為其提供流

 XmlDocument doc = XmlDocument.Load( readStream );

我真的看不到它是否是靜態方法,也沒有環境可以在此處進行測試,但是也許您需要先創建XmlDocument的實例,然后從中運行Load()方法(如果它不是靜態的)

要從流創建XmlDocument :-

XmlDocument document = new XmlDocument();
using(StreamReader readStream = new StreamReader(receiveStream, encode)) 
{        
    document.Load(readStream);
}

重寫MyMethod以獲取XmlDocument

public void MyMethod(XmlDocument xDoc)

並假設您具有該類的實例以及對consoleapp / utility所在位置的引用,並將其傳遞到SearchContactSuccess方法內部:

MyMethod(document);

以下是用於從REST服務讀取響應的偽代碼。 這具有通用的反序列化方法

注意:ContactDetailsPreview是響應對象類型

//通用反序列化

  public static T DeserializeXml<T>(Stream stream, XmlRootAttribute root)
  {
            XmlSerializer deserializer = new XmlSerializer(typeof(T), root);
            return (T)deserializer.Deserialize(stream);
  }

//代碼段1

restClient.DoPost(builder.Uri, Serializer.SerializeXml(addressBookDataRequest.contactsSearchCriteria), SearchContactSuccess, SearchContactFailed, addressBookDataRequest.HeaderParams);

//代碼段2

public event EventHandler<ServiceResponseEventArgs<ContactDetailsPreview[]>> SearchContactDetailsCompleted;

//代碼段3

private void SearchContactSuccess(HttpWebResponse response)
    {

        //Call base service method - to inspect the response and publish an event
        HandleServiceSearchSuccess<ContactDetailsPreview[]>(SearchContactDetailsCompleted, "contactDetailsPreviews", response);
        Stream receiveStream = response.GetResponseStream();
        Encoding encode = System.Text.Encoding.UTF8;
        StreamReader readStream = new StreamReader(receiveStream, encode);
        readStream.ReadLine();
    }

//搜索成功響應的通用處理程序

public void HandleServiceSearchSuccess<T>(EventHandler<ServiceResponseEventArgs<T>> eventHandler, String rootElementName, HttpWebResponse response)
{
EventHandler<ServiceResponseEventArgs<T>> theGivenEventHandler = eventHandler;
obj = Serializer.DeserializeXml<T>(response.GetResponseStream(), new XmlRootAttribute() { ElementName = rootElementName });
    theGivenEventHandler(this, new ServiceResponseEventArgs<T>(obj));

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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