Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确地从web服务返回值?_C#_.net_Web Services - Fatal编程技术网

C# 如何正确地从web服务返回值?

C# 如何正确地从web服务返回值?,c#,.net,web-services,C#,.net,Web Services,我不熟悉web服务。我使用web服务创建了一个电子邮件服务 我的问题是: 如何使用“已发送”和“发送失败”的MsgBox发送电子邮件?您需要创建一个自定义响应类型,并从您的服务返回该类型。客户端(调用服务的客户端)应该读取响应,并负责弹出一个消息框,说明服务调用是否成功 以下是该类型的外观: [DataContract] public class SendMessageResponse { [DataMember] public bool Successful { get; se

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

我的问题是:


如何使用“已发送”和“发送失败”的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块之外。否则,它不应该抛出那个错误。确保右键单击“引用”文件夹中的服务引用,然后说“更新引用”以刷新服务合同。如何使其异步?