WCF 服务 - 尝试返回类

问题描述 投票:0回答:1

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

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; }
}

@@@@@@@@@@@

这是我的Service,已实现的功能:

public class Service1 : IService1 {

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

        return t;
    }
}

以及服务合同:

[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);
不打印任何内容,这意味着我的服务器端没有处理客户端给出的数据并且根本不返回任何内容。我找不到任何真正有帮助的东西,这就是我来这里向社区求助的原因。我做错了什么?

c# .net visual-studio wcf datacontract
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.