Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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#_Web Services_Windows Phone 8.1 - Fatal编程技术网

C# 检查Web服务连接

C# 检查Web服务连接,c#,web-services,windows-phone-8.1,C#,Web Services,Windows Phone 8.1,我开发了一个简单的Web服务和一个WindowsPhone8应用程序来使用它。 一切都按预期工作,但按照我当前(工作)代码的方式,它假设Web服务始终运行并可用。考虑到情况并非总是如此,我想在开始发送请求之前尝试添加一些连接测试。我已经读到,除了以某种方式查询它之外,没有直接的方法可以确定WS是否已经启动并运行 记住这一点,下面是我的加载数据方法结构的样子(2月26日): 它仍然会抛出一个错误 编辑:在考虑了这两个建议并进行了一些搜索之后,我尝试设置一个“心跳”类型的方法,但它无法正常工作。异步

我开发了一个简单的Web服务和一个WindowsPhone8应用程序来使用它。 一切都按预期工作,但按照我当前(工作)代码的方式,它假设Web服务始终运行并可用。考虑到情况并非总是如此,我想在开始发送请求之前尝试添加一些连接测试。我已经读到,除了以某种方式查询它之外,没有直接的方法可以确定WS是否已经启动并运行

记住这一点,下面是我的加载数据方法结构的样子(2月26日):

它仍然会抛出一个错误

编辑:在考虑了这两个建议并进行了一些搜索之后,我尝试设置一个“心跳”类型的方法,但它无法正常工作。异步编程对我来说是一个相对较新的范例,因此我很可能遗漏了一些东西,但我到目前为止的实现尝试如下(得到一个“无法将'System.Net.Browser.OHWRAsyncResult'类型的对象强制转换为'System.Net.HttpWebResponse'”异常):


向服务中添加“heartbeat”方法。这是一种只发送回确认消息的方法。在会话开始时,呼叫心跳,如果你得到确认,你是金黄色的,如果没有,由于某种原因,服务不可用。我尝试过这样做,但没有成功。更新帖子以反映变化。
public void LoadData(string articleCode = null)
{
    try
    {
        this.ArticleItems.Clear();
        MyServiceSoapClient ws = new MyServiceSoapClient();
        CheckWebService(); 
        if (this.isWebServiceUp)
        {
            if (!String.IsNullOrEmpty(articleCode))
            {
                ws.GetBasicDataAsync(articleCode);
                ws.GetBasicDataCompleted += Ws_GetBasicDataCompleted;
                //(irrelevant code supressed for clarity)

                this.IsDataLoaded = true;                   
            }
        }
        else
        {
            this.ArticleItems.Add(new ItemViewModel() { LineOne = "Could not connect to Web Service." });
            ws.Abort();
        }
    }
}
public void CheckWebService()
{ 
    try
    {
        Uri wsURL = new Uri("http://localhost:60621/WebService1.asmx");
        //try accessing the web service directly via its URL
        var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(wsURL);
        request.Method = "HEAD";
        //next line throws: "Unable to cast object of type 'System.Net.Browser.OHWRAsyncResult' to type 'System.Net.HttpWebResponse'."
        using (var response = (System.Net.HttpWebResponse)request.BeginGetResponse(new AsyncCallback(ServiceCallback), request))
        {
            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                throw new Exception("Error locating web service");
            }
        }
    }
    catch (System.ServiceModel.FaultException fe)
    {
        this.ArticleItems.Add(new ItemViewModel() { LineOne = fe.Message });
    }
    catch (System.ServiceModel.CommunicationException ce)
    {
        this.ArticleItems.Add(new ItemViewModel() { LineOne = ce.Message });
    }
    catch (System.Net.WebException we)
    {
        this.ArticleItems.Add(new ItemViewModel() { LineOne = we.Message });
    }
    catch (Exception ex)
    {
        this.ArticleItems.Add(new ItemViewModel() { LineOne = ex.Message });
    }
}

private void ServiceCallback(IAsyncResult asyncResult)
{
    try
    {
        System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)asyncResult.AsyncState;
        using (var response = (System.Net.HttpWebResponse)request.EndGetResponse(asyncResult))
        {
            if (response != null && response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                this.isWebServiceUp = true;
                request.Abort();
            }
        }
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}