解析Silverlight调用WCF/Rest异常的解决方法

解析Silverlight调用WCF/Rest异常的解决方法。下面我们来一步步讲解。

问题描述

在使用Silverlight调用WCF/Rest服务时,可能会遇到各种异常错误,比如:

  • System.ServiceModel.CommunicationException
  • System.ServiceModel.FaultException
  • System.Net.WebException等等。

那么,如何解决这些异常呢?接下来,将详细讲解这个问题。

解决方法

针对这个问题,我们可以有以下方式解决:

1. 在服务端增加配置

在服务端的web.config中添加以下配置:

<system.serviceModel>
  <services>
    <service name="MyService">
      <endpoint binding="customBinding" bindingConfiguration="crossDomain" contract="IMyService" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:8000/MyService/" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <bindings>
    <customBinding>
      <binding name="crossDomain">
        <textMessageEncoding messageVersion="Soap11" />
        <httpTransport allowCookies="false" authenticationScheme="Anonymous" bypassProxyOnLocal="true" hostNameComparisonMode="WeakWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" useDefaultWebProxy="true"/>
      </binding>
    </customBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="false" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

2. 在客户端增加配置

在客户端的App.config中添加以下配置:

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding name="CustomBinding_IMyService">
        <textMessageEncoding messageVersion="Soap11" />
        <httpTransport maxReceivedMessageSize="2147483647" allowCookies="true" authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" proxyAuthenticationScheme="Anonymous" realm="" useDefaultWebProxy="false" />
      </binding>
    </customBinding>
  </bindings>
  <client>
    <endpoint address="http://localhost:8000/MyService/" binding="customBinding" bindingConfiguration="CustomBinding_IMyService" contract="IMyService" name="CustomBinding_IMyService" />
  </client>
</system.serviceModel>

示例一:使用Rest服务获取数据

在服务端,我们可以创建TestService.svc文件,内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace TestService
{
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        [WebGet(UriTemplate = "/GetData/{value}", ResponseFormat = WebMessageFormat.Json)]
        string GetData(string value);
    }

    public class TestService : ITestService
    {
        public string GetData(string value)
        {
            return "You entered: " + value;
        }
    }
}

在客户端,我们可以使用以下代码调用服务:

private void CallRestService()
{
    WebClient client = new WebClient();
    client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(OnDownloadStringCompleted);
    client.DownloadStringAsync(new Uri("http://localhost:8000/TestService/GetData/123"));
}

private void OnDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        MessageBox.Show(e.Result);
    }
    else
    {
        MessageBox.Show(e.Error.Message);
    }
}

示例二:使用WCF服务获取数据

在服务端,我们可以创建TestService.svc文件,内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace TestService
{
    [ServiceContract]
    public interface ITestService
    {
        [OperationContract]
        string GetData(string value);
    }

    public class TestService : ITestService
    {
        public string GetData(string value)
        {
            return "You entered: " + value;
        }
    }
}

在客户端,我们可以使用以下代码调用服务:

private void CallWcfService()
{
    TestServiceClient client = new TestServiceClient();
    client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(OnGetDataCompleted);
    client.GetDataAsync("123");
}

private void OnGetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
    if (e.Error == null)
    {
        MessageBox.Show(e.Result);
    }
    else
    {
        MessageBox.Show(e.Error.Message);
    }
}

通过以上方式,我们就可以解决Silverlight调用WCF/Rest异常的问题了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解析Silverlight调用WCF/Rest异常的解决方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • CefSharp自定义缓存实现

    大家好,我是沙漠尽头的狼。 上文介绍了《C#使用CefSharp内嵌网页-并给出C#与JS的交互示例》,本文介绍CefSharp的缓存实现,先来说说添加缓存的好处: 提高页面加载加速:CefSharp缓存可以缓存已经加载过的页面和资源,当用户再次访问相同的页面时,可以直接从缓存中加载,而不需要重新下载和解析页面和资源,从而加快页面加载速度。 减少网络流量:使…

    C# 2023年5月4日
    00
  • C#委托与匿名委托详解

    C#委托与匿名委托 引言 在C#开发中,委托是很常用的一种类型。简单来说,委托就是一个带有参数列表和返回值类型的类,它可以定义方法的返回类型和参数类型。通过委托,我们可以像调用普通方法一样调用其他方法。匿名委托是委托的一种特例,它是一个没有名称的委托。本文将详细介绍C#委托与匿名委托的使用。 委托的定义与使用 委托的定义 委托的定义格式如下: delegat…

    C# 2023年6月7日
    00
  • C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

    下面我将详细讲解C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例的完整攻略。 什么是Builder生成器模式 Builder生成器模式是一种创建型设计模式,它将对象的构建和表示分离,使得同样的构建过程可以创建不同的表示,这样可以使得对象的构建更加灵活。Builder生成器模式一般涉及如下几个角色: Builder:抽象生成器,用于定义创建一个…

    C# 2023年6月1日
    00
  • C#实现中英文混合字符串截取的方法

    实现中英文混合字符串截取需要考虑到中文字符的字节数与英文字符的字节数不同,如果简单地使用字符串的截取方法,可能得到的结果会出现乱码或字串不完整的情况。下面介绍几种方法来实现中英文混合字符串截取。 1.使用Substring方法和Char.IsHighSurrogate方法 使用C#字符串类的Substring方法可以很容易地实现字符串的截取操作。然而,为了保…

    C# 2023年6月8日
    00
  • 利用C#编写一个Windows服务程序的方法详解

    Title: 利用C#编写一个Windows服务程序的方法详解 介绍 Windows服务是在后台运行的程序,可以在计算机启动时自动启动,不需要用户登陆即可运行。本文将详细讲解如何利用C#编写一个Windows服务程序。 步骤 1.创建Windows服务项目 打开Microsoft Visual Studio,选择“新建项目”,在左侧菜单中选择“Visual.…

    C# 2023年6月1日
    00
  • ASP.NET Core使用固定窗口限流

    ASP.NET Core是一个跨平台的、高效的、模块化的Web开发框架。固定窗口限流是一种常用的限流算法,用于控制并发请求的数量,防止系统被过多的请求压垮。在ASP.NET Core中使用固定窗口限流可以有效地保证系统的稳定性,提高系统的吞吐量和响应速度。 以下是使用固定窗口限流的攻略: 1. 在ASP.NET Core项目中安装Microsoft.AspN…

    C# 2023年6月3日
    00
  • C# cefSharep控件的使用详情

    C# cefSharp 控件的使用详情 什么是 cefSharp 控件 cefSharp 控件是一种基于 C# 的浏览器嵌入控件,它是一个基于 Chromium 的项目,可以通过 cefSharp 控件在 Windows 窗体应用程序中嵌入 HTML 内容和 JavaScript 脚本,并为这些内容提供浏览器的一般功能。 安装 cefSharp 控件 使用 …

    C# 2023年6月1日
    00
  • Unity ScrollView实现自动吸附效果

    我将详细讲解一下“Unity ScrollView实现自动吸附效果”的完整攻略。 一、准备工作 创建一个空的Unity项目 创建一个Canvas,将Canvas的Render Mode设置为Screen Space – Overlay 在Canvas下面创建一个ScrollView,将ScrollView的Content的Layout Group设置为Ver…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部