簡體   English   中英

使用 datacontract 使用 WCF Restful 服務

[英]Consume WCF Restful service with datacontract

我創建了以下restfull網絡服務:

界面

[ServiceContract]
public interface ISIGService
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml,
                   BodyStyle = WebMessageBodyStyle.Bare,
                   UriTemplate = "GetTicket/")]
    Ticket GetTicket(string user, string pwd);
}

執行

public class SIGService : ISIGService
{
    public Ticket GetTicket(string user, string pwd)
    {
        return new Ticket()
        {
            Usuario = "xx",
            UsuarioNombre = "xxx",
            UsuarioId = "xxx"
        };
    }

合同

[DataContract]
public class Ticket
{
    [DataMember]
    public int UsuarioId { get; set; }

    [DataMember]
    public string UsuarioNombre { get; set; }

    [DataMember]
    public string Usuario { get; set; }
}

我需要從 Web 應用程序使用此服務,並獲取類型化對象Ticket ,我為此包含了一個服務引用。

服務器端代碼

string urlService = 
    String.Format("http://localhost:22343/SIGService.svc/GetTicket/?user='{0}'&pwd='{1}'", 
                 usuario, password);

var request = (HttpWebRequest)WebRequest.Create(urlService);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);

string text = reader.ReadToEnd();

我放了一個text變量只是為了得到一些東西,在這里有點丟失。

我似乎沒有得到這個對象,你能指點一下嗎?

最有可能的是,您只需要更改您的 URL

http://localhost:22343/SIGService.svc/GetTicket/?user='{0}'&pwd='{1}'

使用正確的REST語法(因為您使用的是 REST 服務):

http://localhost:22343/SIGService.svc/GetTicket/{user}/{pwd}

樣本:

http://localhost:22343/SIGService.svc/GetTicket/daniel/topsecret

沒有? user=或需要單引號 ....

這樣, {0}的值將傳遞給user參數,而{1}的值將傳遞給pwd參數。

對於使用該服務,我建議您查看出色的RestSharp庫,它使您可以輕而易舉地使用 REST 服務。

您的代碼如下所示:

// set up the REST Client
string baseServiceUrl = "http://localhost:22343/SIGService.svc";

RestClient client = new RestClient(baseServiceUrl);

// define the request
RestRequest request = new RestRequest();
request.Method = Method.GET;
request.RequestFormat = DataFormat.Xml;
request.Resource = "GetTicket/{user}/{pwd}";
request.AddParameter("user", "daniel", ParameterType.UrlSegment);
request.AddParameter("pwd", "top$ecret", ParameterType.UrlSegment);

// make the call and have it deserialize the XML result into a Ticket object
var result = client.Execute<Ticket>(request);

if (result.StatusCode == HttpStatusCode.OK)
{
    Ticket ticket = result.Data;
}

暫無
暫無

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

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