WCF服务 - 尝试返回一个类

时间:2016-12-21 17:11:06

标签: c# .net visual-studio wcf datacontract

这是我的程序(客户端),尝试获取Transaction返回的函数如下所示:

private void MakeTransition_Click(object sender, RoutedEventArgs e) {
        //string CardHoldName = _CardHoldName.Text;
        //string CardBrand = _CardBrand.Text;
        //string Password = _Password.Text;
        int CardNumber = int.Parse(_CardNumber.Text);
        //int ExpirationDateM = int.Parse(_ExpirationDateM.Text);
        //int ExperiationDateY = int.Parse(_ExpirationDate_Y.Text);
        int TransationValue = int.Parse(_TransitionValue.Text);

        Transition t = new Transition();

        t.CardNumber = CardNumber;
        t.TransitionValue = TransationValue;

        HttpClient client = new HttpClient();
        string serializedContent = JsonConvert.SerializeObject(t);
        StringContent content = new StringContent(serializedContent);

        /*Transaction teste = JsonConvert.DeserializeObject<Transaction>(content.ReadAsStringAsync().Result);
        MessageBox.Show(teste.TransitionValue + "");
        MessageBox.Show(content.ReadAsStringAsync().Result);*/

        HttpResponseMessage response = client.PostAsync("http://localhost:8733/Design_Time_Addresses/HireMePleasee_Server/Service1/mex", content).Result;

        MessageBox.Show(response.Content.ReadAsStringAsync().Result);

        TransactionResponse r = JsonConvert.DeserializeObject<TransactionResponse>(response.Content.ReadAsStringAsync().Result);

        if (r.Status == "Approved") {
            MessageBox.Show("APPROVED!!!");
        } else {
            MessageBox.Show("YOU GET NOTHING! GOOD DAY, SIR!");
        }
    }
}

客户端上的我的交易类:

[DataContract]
public class Transaction{
    [DataMember]
    public int CardNumber { get ; set; }
    [DataMember]
    public int TransitionValue { get; set; }
}

客户端上的TransactionResponse类:

[DataContract]
public class TransactionResponse {
    [DataMember]
    public string Status { get; set; }
}

@@@@@@@@@@@

这是我的服务,实现了功能:

public class Service1 : IService1 {

    public Transaction checkTransaction(Transaction t) {
        if (t.TransactionValue > 1500) {
            t.Status = "Denied";
        } else {
            t.Status = "Approved";
        }

        return t;
    }
}

ServiceContract:

[ServiceContract]
public interface IService1 {
    [OperationContract]
    Transaction checkTransaction(Transaction t);
}

[DataContract]
public class Transaction {
    [DataMember]
    public int CardNumber { get; set; }
    [DataMember]
    public int ValidationDate { get; set; }
    [DataMember]
    public int TransactionValue { get; set; }
    [DataMember]
    public string Status { get; set; }
}

以某种方式“MessageBox.Show(response.Content.ReadAsStringAsync()。Result);”什么都不打印,这意味着我的服务器端不处理从客户端给出的数据并且根本不返回任何内容。我找不到真正有用的东西,这就是我在这里要求社区的原因。我究竟做错了什么??? :(

1 个答案:

答案 0 :(得分:0)

首先,您不能通过HttpClient()类直接调用WCF SOAP服务,因为HttpClient()用于直接在url上公开某些数据的地方。如果您想使用HttpClient访问WCF服务,那么请将您的WCF服务转换为Restful服务。(请查看什么是WCF restful服务)。

但是,如果您不想使用Proxy类来调用WCF Soap服务,那么HttpClient的一个替代方法是使用ChannelFactory Class。该类与HttpClient不同,但这是为了使用您的服务而不为WCF服务上的类创建代理。

请查看此链接,了解更多如何创建restful服务并使用HttpClient进行调用。 http://sylvester-lee.blogspot.in/2013/04/wcf-rest-service-httpclient-vs-wcf.html