如何从Web服务正确返回值?

ghi*_*hie 4 .net c# web-services

我不熟悉Web服务.我使用Web服务创建了一个电子邮件服务.

我的问题是:

如何使用MsgBox"已发送"和"已发送失败"进行电子邮件发送?

Jor*_*mer 5

您需要创建自定义响应类型并从服务中返回该类型.客户端(调用该服务)应该读取响应并负责弹出一个消息框,说明服务调用是否成功.

这是类型的样子:

[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;
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是服务代码的外观:

[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;
}
Run Code Online (Sandbox Code Playgroud)

这样,您的服务永远不会使通道出错并始终返回您的响应对象(即使在异常的情况下).然后,您可以使用响应对象与客户端通信您的服务调用状态.

以下是客户端的外观:

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() );
    }
}
Run Code Online (Sandbox Code Playgroud)

客户端代码是一个粗略的例子,但它应该让你知道我在说什么.