C# 如何正确地从web服务返回值?
我不熟悉web服务。我使用web服务创建了一个电子邮件服务 我的问题是:C# 如何正确地从web服务返回值?,c#,.net,web-services,C#,.net,Web Services,我不熟悉web服务。我使用web服务创建了一个电子邮件服务 我的问题是: 如何使用“已发送”和“发送失败”的MsgBox发送电子邮件?您需要创建一个自定义响应类型,并从您的服务返回该类型。客户端(调用服务的客户端)应该读取响应,并负责弹出一个消息框,说明服务调用是否成功 以下是该类型的外观: [DataContract] public class SendMessageResponse { [DataMember] public bool Successful { get; se
如何使用“已发送”和“发送失败”的MsgBox发送电子邮件?您需要创建一个自定义响应类型,并从您的服务返回该类型。客户端(调用服务的客户端)应该读取响应,并负责弹出一个消息框,说明服务调用是否成功 以下是该类型的外观:
[DataContract]
public class SendMessageResponse
{
[DataMember]
public bool Successful { get; set; }
[DataMember]
public List<string> Messages { get; set; }
public SendMessageResponse()
{
this.Successful = true;
this.Messages = new List<string>();
}
public void ProcessException( Exception ex )
{
this.Messages.Add( ex.Message );
this.Successful = false;
}
}
[WebMethod]
public SendMessageResponse SendMessage(...)
{
var response = new SendMessageResponse();
try
{
// Do your send message stuff here...
response.Successful = true; // or whatever you want to say
}
catch( Exception ex )
{
response.ProcessException( ex );
}
return response;
}
public void SendMessage( MessageServiceClient proxy, string mail, string authstr )
{
MessageServiceClient.SendMessageResponse response = proxy.SendMessage( mail, authstr );
if( response.Successful )
{
MessageBox.Show( "Message Sent" );
}
else
{
MessageBox.Show( "Message Failed to Send: " + response.Messages.FirstOrDefault() );
}
}
这样,您的服务就不会出现通道故障,并且将始终返回您的响应对象(即使在出现异常的情况下)。然后,您可以使用响应对象与客户端通信服务调用的状态
以下是客户端的外观:
[DataContract]
public class SendMessageResponse
{
[DataMember]
public bool Successful { get; set; }
[DataMember]
public List<string> Messages { get; set; }
public SendMessageResponse()
{
this.Successful = true;
this.Messages = new List<string>();
}
public void ProcessException( Exception ex )
{
this.Messages.Add( ex.Message );
this.Successful = false;
}
}
[WebMethod]
public SendMessageResponse SendMessage(...)
{
var response = new SendMessageResponse();
try
{
// Do your send message stuff here...
response.Successful = true; // or whatever you want to say
}
catch( Exception ex )
{
response.ProcessException( ex );
}
return response;
}
public void SendMessage( MessageServiceClient proxy, string mail, string authstr )
{
MessageServiceClient.SendMessageResponse response = proxy.SendMessage( mail, authstr );
if( response.Successful )
{
MessageBox.Show( "Message Sent" );
}
else
{
MessageBox.Show( "Message Failed to Send: " + response.Messages.FirstOrDefault() );
}
}
客户机代码是一个粗略的示例,但它应该让您了解我所说的内容。Web服务位于Web服务器上而不是客户机上,通过visual studio,您可以向Web服务添加Web引用,这将创建一个代理类,从您的网站调用Web服务,根据您在网站上的回复,您可以告诉客户添加一个消息框 干杯尝试添加 返回“已发送”
关于您的代码..我们需要了解有关您创建的web服务的更多信息。。。你是如何定义它们的?如果您使用C#post服务contracts@nix,好的,谢谢!给你。所以你只想向特定的收件箱发送一条消息,无论是已发送还是失败。我在这里看不到任何web服务?@nix,就像消息发送或失败时的弹出窗口。。第一个是我编辑的。。我在使用“MessageServiceClient”时遇到问题。下面是错误“EmailWebservices.Service1.SendMessage(string,string)”:不是所有代码路径都在原始代码或我给出的示例中返回值?如果是我给出的示例,请确保您的“return”在try/catch块之外。否则,它不应该抛出那个错误。确保右键单击“引用”文件夹中的服务引用,然后说“更新引用”以刷新服务合同。如何使其异步?