WCF 服务 - 尝试 return 一个 class
WCF service - trying to return a class
这是我的程序(客户端)端,尝试获取事务的函数 return 如下所示:
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!");
}
}
}
我在客户端的交易 class:
[DataContract]
public class Transaction{
[DataMember]
public int CardNumber { get ; set; }
[DataMember]
public int TransitionValue { get; set; }
}
客户端上的我的 TransactionResponse class:
[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]
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);”什么都不打印,这意味着我的服务器端没有处理客户端提供的数据,并且 return 什么也没有。我找不到任何真正有帮助的东西,这就是为什么我在这里寻求社区。我究竟做错了什么??? :(
首先,您不能通过 HttpClient() class 直接调用 WCF SOAP 服务,因为在 url 上直接暴露某些数据的地方使用了 HttpClient()。如果您想使用 HttpClient 访问 WCF 服务,请将您的 WCF 服务设置为 Restful 服务。(请查看什么是 WCF restful 服务)。
但是,如果您不想使用 Proxy classes 来调用您的 WCF Soap 服务,那么 HttpClient 的另一种选择是使用 ChannelFactory Class。 class 与 HttpClient 不同,但它是为了使用您的服务而不为 WCF 服务上的 classes 做代理。
请检查此 link 以了解更多如何创建 restful 服务并使用 HttpClient 调用。
http://sylvester-lee.blogspot.in/2013/04/wcf-rest-service-httpclient-vs-wcf.html
这是我的程序(客户端)端,尝试获取事务的函数 return 如下所示:
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!");
}
}
}
我在客户端的交易 class:
[DataContract]
public class Transaction{
[DataMember]
public int CardNumber { get ; set; }
[DataMember]
public int TransitionValue { get; set; }
}
客户端上的我的 TransactionResponse class:
[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]
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);”什么都不打印,这意味着我的服务器端没有处理客户端提供的数据,并且 return 什么也没有。我找不到任何真正有帮助的东西,这就是为什么我在这里寻求社区。我究竟做错了什么??? :(
首先,您不能通过 HttpClient() class 直接调用 WCF SOAP 服务,因为在 url 上直接暴露某些数据的地方使用了 HttpClient()。如果您想使用 HttpClient 访问 WCF 服务,请将您的 WCF 服务设置为 Restful 服务。(请查看什么是 WCF restful 服务)。
但是,如果您不想使用 Proxy classes 来调用您的 WCF Soap 服务,那么 HttpClient 的另一种选择是使用 ChannelFactory Class。 class 与 HttpClient 不同,但它是为了使用您的服务而不为 WCF 服务上的 classes 做代理。
请检查此 link 以了解更多如何创建 restful 服务并使用 HttpClient 调用。 http://sylvester-lee.blogspot.in/2013/04/wcf-rest-service-httpclient-vs-wcf.html